从宏变量中减去日期

时间:2016-12-06 16:12:11

标签: date sas sas-macro

我无法从宏变量中减去日期。

目前,我通过运行:

创建一个宏变量
%LET date = %SYSFUNC(TODAY(),MMDDYY10.); 

我觉得我应该可以通过以下方式从& date 中减去1天:

%LET newDate = %SYSFUNC(%INTNX('day',&date,-1),date9.);

然而,这会产生错误:

错误:%SYSFUNC或%QSYSFUNC宏功能参考中缺少函数名称。

我需要& newDate 的输出为 date9。

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:2)

快速回答:

%LET date = %SYSFUNC(TODAY()); 
%LET newDate = %SYSFUNC(INTNX(day,&date,-1),date9.);
%put &=newdate;

<强>解释

首先,最好从&date中删除格式,以确保将其正确解释为日期。您的原始代码(今天)在intnx()到2016年6月12日解决,然后解决为12除以6除以2016 - 等等。

其次,%sysfunc()的内部函数应该是一个datastep函数 - 实际上,%sysfunc()的重点是将这些函数带入sas。 %intnx()不是宏函数,但如果是,则根据定义,您不需要将其包装在%sysfunc()中。

最后,不应引用'day'参数 - 默认情况下,sas宏中的所有内容都被视为文本。

答案 1 :(得分:0)

@RawFocus,你是正确的,没有必要格式化原始日期(今天的日期),并且更容易处理这种方式。

为了完整起见,如果有人想要应用MMDDYY10.格式,就可以这样做:

%LET date = %SYSFUNC(TODAY(),mmddyy10.); 
%LET newDate = %SYSFUNC(INTNX(day,%SYSFUNC(INPUTN(&date,mmddyy10)),-1),date9.);
%put &=date &=newdate;