【问题标题】:Filter data by minutes in SAS (PROC SQL) - Using time in WHERE clause?在 SAS(PROC SQL)中按分钟过滤数据 - 在 WHERE 子句中使用时间?
【发布时间】:2018-05-31 04:47:24
【问题描述】:

试图调出在不到 1 分钟内接听电话的所有记录。

我的数据集 p1 有点像这样

Call_date  pick_up
05/30/2018 0:19
05/29/2018 1:45
05/29/2018 0:37
05/28/2018 1:01

这是在 SAS 中。当我运行 PROC CONTENTS 时,我得到的 pick_up 列的信息是 TIME20.3

所以我尝试运行这段代码:

PROC SQL;
SELECT p1.call_date,p1.pick_up
FROM p1

WHERE p1.pick_up < 1:00time20.3;

QUIT;

我收到以下错误:

ERROR 22-322: Syntax error, expecting one of the following: ;, !, !!, &, *, **, +, -, /, <, <=, <>, =, >, >=, AND, EQ, EQT, EXCEPT, 
           GE, GET, GROUP, GT, GTT, HAVING, INTERSECT, LE, LET, LT, LTT, NE, NET, NOT, OR, ORDER, OUTER, UNION, ^, ^=, |, ||, ~, 
           ~=.  

ERROR 76-322: Syntax error, statement will be ignored.

有没有一种简单的方法可以按分钟和秒过滤我的数据?

谢谢!

【问题讨论】:

    标签: sql time sas where-clause proc-sql


    【解决方案1】:

    SAS 以秒为单位存储时间,因此您可以执行以下操作。

    WHERE p1.pick_up < 60;
    

    您还可以按如下方式指定时间文字:

    WHERE p1.pick_up < '01:00't;
    

    格式控制变量的外观,但不会改变底层变量。

    您可以在此处找到有关 SAS 日期和时间的教程: https://communities.sas.com/t5/SAS-Communities-Library/Working-with-Dates-and-Times-in-SAS-Tutorial/ta-p/424354

    【讨论】:

    • 谢谢,效果很好!也感谢您的链接,一定会看看。这有点相关......例如,如果我想检索晚上 10 点到凌晨 1 点之间的记录,假设 ***** 时间>='22:00't AND 时间
    • 晚上 10 点到凌晨 1 点之间的问题不回答。时间从午夜开始以秒为单位。所以凌晨 1 点是 3600 (60*60*1),晚上 10 点是 79,200 (60*60*22),所以time &gt;=79200 AND time &lt;= 3600 永远不会是真的。你需要OR,而不是AND
    • 对于这个问题,您需要考虑日期和时间。因为您可能会将晚上 10 点到凌晨 1 点视为跨越数天的连续时间段,而不是午夜到凌晨 1 点和晚上 10 点到凌晨 12 点。
    • 是的,有道理。我以前从未遇到过数小时/分钟的数据集,这让我感到困惑。理解 SAS 从午夜开始以秒为单位测量时间本质上是那种情况下的知识差距。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多