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

时间:2016-02-07 17:20:19

标签: 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这样的数字日期,这很好,因为我在传递查询中使用此数字日期。但我还需要将此日期转换为日期时间格式,例如"21Dec2015:00:00:00"dt,以便我也可以在proc sql中使用此日期。在搜索了sas文档和博客之后,我一直无法做到这一点。请帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用PUT来应用格式,但如果您需要引号和dt那么这是一个不同的故事。如果你确实需要它们,我认为当前的宏变量也可以。否则你还有其他一些问题。除非您需要一个字符或者将其传递给DB,否则不要求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;

答案 1 :(得分:0)

SAS将日期时间和日期时间值存储为数字。就像在datastep中一样 在那里你可以写“where x ='19feb2016'd”或“where x = 20503”这是SAS为date = 19feb2016存储的数字,你可以在proc sql中做同样的事情。

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