我无法从宏变量中减去日期。
目前,我通过运行:
创建一个宏变量%LET date = %SYSFUNC(TODAY(),MMDDYY10.);
我觉得我应该可以通过以下方式从& date 中减去1天:
%LET newDate = %SYSFUNC(%INTNX('day',&date,-1),date9.);
然而,这会产生错误:
错误:%SYSFUNC或%QSYSFUNC宏功能参考中缺少函数名称。
我需要& newDate 的输出为 date9。
任何帮助将不胜感激,谢谢!
答案 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;