将 SAS 数字日期转换为日期时间格式

Convert SAS numeric dates to datetime format

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

$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 文档和博客后,我一直无法做到这一点。请帮忙

您可以使用 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;

SAS 将日期时间和日期时间值存储为数字。就像在数据步骤中一样 您可以在其中写入 "where x='19feb2016'd" 或 "where x=20503" 这是 SAS 为 date=19feb2016 存储的数字,您可以在 proc sql.

中执行相同的操作

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