sas输入写为yyyymmdd的宏日期

时间:2014-09-08 17:44:21

标签: sas sas-macro

以下是我如何输入和使用日期作为宏变量:

%let x = %SYSEVALF('01jan2012'd);
%put &x; *see the date as sas sees it;
%put %SYSFUNC(putn(&x,yymmn.)); *see the date as yyyymm;

这很棒,但我已经厌倦了以'01jan2012'd输入日期。在特殊情况下,我可能希望将日期作为宏变量y传递,其中y的格式为yyyymmdd,如下所示:

%let y = 20120101;
%let x = %SYSEVALF(&y);

当然,这不起作用。因此,给定y,我应该使用什么而不是%let x = %SYSEVALF(&y);x作为日期的宏变量,因为sas看到日期?

2 个答案:

答案 0 :(得分:5)

首先关闭:如果您手动输入,使用SAS约定。输入'01JAN2012'd。它比YYYYMMDD值的读取速度更快,而且无论如何它都是其他SAS程序员所期望的

第二:在任何一种情况下我都不会使用%SYSEVALF()。 %let x ='01JAN2012'd;几乎在每种情况下都足够了,而且如果不是那么你可能会以低效或标准的方式做某事。除非你打算在某处使用18993文本(在这种情况下,好的,你可以使用它)'01JAN2012'd是将它存储在宏变量中的正确方法 - 让SAS稍后将其转换为18993。

最后:

%let y=20120101;
%let x=%sysfunc(inputn(&y,YYMMDD8.));

是做你问的最简单的方法。

答案 1 :(得分:0)

data _null_;
    Call Symput('NAME',put(today()-1,yymmdd10.));
run;

您只需将NAME更改为宏名称,然后像往常一样通过& NAME调用它来重命名代码

我希望这会有所帮助 - 或者只是输入该表格中的日期

input(put(DATE,8.), yymmdd8.) AS DATENAME format=ddMMYY10.