【问题标题】:INTNX in PROC SQLPROC SQL 中的 INTNX
【发布时间】:2022-12-22 00:36:44
【问题描述】:

我是 SAS 的新手,所以如果我对这个问题有点天真或愚蠢,我很抱歉。

我试图通过 INTNX 函数将结束日期链接到我的“where”子句上的初始日期,但程序返回具有不同日期的结果。我真的不知道我在这里做错了什么。我正在使用 EG 8.2。

%LET ini_date = '10DEC2022'; %LET end_date = intnx('week',&inidate, 1);

过程 SQL; 创建表 FAT_CRED 为 选择 * 从表 A 其中 A.DAT_MOV >= &ini_date。 和 A.DAT_MOV < &end_date。 按 1,2,3,4 分组 ;放弃;

奇怪的是,系统返回的结束日期为 2020 年 2 月 3 日 (03FEB2020:00:00:00.000000),因此我没有从查询中获得任何数据。我希望收集 10DEC 和 16DEC 之间的信息,但我无法掌握问题是否出在 PROC SQL 和 INTNX 函数(及其语法)之间的兼容性、表 A 中的日期格式等。

在此先感谢您的帮助!

【问题讨论】:

    标签: sas proc-sql


    【解决方案1】:

    造成您混淆的最可能原因是您的变量似乎包含日期时间值(您显示的值为“03FEB2020:00:00:00.000000”)而不是实际日期值。 SAS 将日期值存储为天,将日期时间值存储为秒。因此,如果将任何合理的日期值视为日期时间值,那么任何合理的日期值都将是 1960 年 1 月 1 日清晨的某个时间。

    在进行比较之前将日期时间值转换为日期值

    WHERE datepart(A.DAT_MOV) >= &ini_date.
      AND datepart(A.DAT_MOV) < &end_date. 
    

    或者将日期时间值生成到您的宏变量中。

    %LET ini_date = '10DEC2022:00:00:00'dt; 
    %LET end_date = "%sysfunc(intnx(dtweek,&ini_date, 1),datetime19.)"dt;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多