【问题标题】:Convert SAS numeric dates to datetime format将 SAS 数字日期转换为日期时间格式
【发布时间】:2025-12-16 11:55:01
【问题描述】:

我正在尝试将数字日期转换为日期时间格式。我首先从我拥有的日期中减去几天。

$let from_date = "21JUL2016:00:00:00"dt;

data _null_;
    datediff = intnx('dtday',&from_dt,-180);
    call symput("cutoff_dt",datediff);
run;

在此之后,我得到像 17633333 这样的数字日期,这很好,因为我在通过查询时使用这个数字日期。但我还需要将此日期转换为日期时间格式,例如"21Dec2015:00:00:00"dt,以便我也可以在proc sql 中使用此日期。到目前为止,在搜索 sas 文档和博客之后,我一直无法做到这一点。请帮忙。

【问题讨论】:

    标签: sas sas-macro


    【解决方案1】:

    您可以使用 PUT 来应用格式,但如果您需要引号和 dt,那就另当别论了。如果您确实需要它们,我认为当前的宏变量也可以。否则,您还有其他问题。 SQL 不需要格式化值,除非您需要一个字符或将其传递给数据库。在这些情况下,也不需要 dt。

    %let from_date = "21JUL2016:00:00:00"dt;
    
    data _null_;
    datediff = intnx('dtday',&from_dt,-180);
    call symput("cutoff_dt", put(datediff, datetime21.));
    run;
    

    【讨论】:

      【解决方案2】:

      SAS 将日期时间和日期时间值存储为数字。就像在数据步中一样 您可以写“where x='19feb2016'd”或“where x=20503”,这是 SAS 为 date=19feb2016 存储的数字,您可以在 proc sql 中执行相同操作。

      如果您要比较的变量包含日期作为字符串,您只需将日期值作为字符值写出。也就是说 y 的值为“19feb2016”,x 的值为 20503,如果 y=x 的测试将无法达到您想要的效果。那就是你必须写 if y=put(x,date9.);

      【讨论】: