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

将SAS数字日期转换为日期时间格式,sas,sas-macro,Sas,Sas Macro,我正在尝试将数字日期转换为日期时间格式。我先从我的日期减去几天 $let from_date = "21JUL2016:00:00:00"dt; data _null_; datediff = intnx('dtday',&from_dt,-180); call symput("cutoff_dt",datediff); run; 在此之后,我得到了类似于17633333的数字日期,这很好,因为我在传递查询中使用了这个数字日期。但我还需要将此日期转换为日期时间格式,如

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

$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”dt
,以便我也可以在
proc sql
中使用此日期。到目前为止,在搜索sas文档和博客后,我一直无法做到这一点。请提供帮助。

您可以使用PUT应用格式,但如果您需要引号和dt,则情况不同。如果您确实需要它们,我认为当前的宏变量也可以工作。否则你会有其他问题。SQL不需要格式化的值,除非您需要一个字符或将其传递给DB。在这些情况下,也不需要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为日期=19feb2016存储的数字,您可以在proc sql中执行相同的操作

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