从宏变量中减去日期
Subtract date from macro variable
我在从宏变量中减去日期时遇到问题。
目前,我通过运行创建了一个宏变量:
%LET date = %SYSFUNC(TODAY(),MMDDYY10.);
我觉得我应该可以通过执行以下操作从 &date 中减去 1 天:
%LET newDate = %SYSFUNC(%INTNX('day',&date,-1),date9.);
但是,这会产生错误:
错误:%SYSFUNC 或 %QSYSFUNC 宏函数引用中缺少函数名称。
我需要 &newDate 的输出在 date9.
任何帮助将不胜感激,谢谢!
快速回答:
%LET date = %SYSFUNC(TODAY());
%LET newDate = %SYSFUNC(INTNX(day,&date,-1),date9.);
%put &=newdate;
解释:
首先,最好从 &date
中删除格式,以确保它被正确解释为日期。您的原始代码(今天)在 intnx()
内解析为 12/06/2016,然后解析为 12 除以 6 除以 2016 - 等等
其次,%sysfunc()
的内部函数应该是一个数据步函数——事实上,%sysfunc()
的全部意义在于将这些函数引入 sas。 %intnx()
不是宏函数,但如果是,那么根据定义,您不需要将它包装在 %sysfunc()
中。
最后,'day' 参数不应被引用 - 默认情况下,sas 宏中的所有内容都被视为文本。
@RawFocus,你是对的,原始日期(今天的日期)不需要格式化,这样处理更容易。
为了完整起见,如果有人想应用 MMDDYY10.
格式,可以这样做:
%LET date = %SYSFUNC(TODAY(),mmddyy10.);
%LET newDate = %SYSFUNC(INTNX(day,%SYSFUNC(INPUTN(&date,mmddyy10)),-1),date9.);
%put &=date &=newdate;
我在从宏变量中减去日期时遇到问题。
目前,我通过运行创建了一个宏变量:
%LET date = %SYSFUNC(TODAY(),MMDDYY10.);
我觉得我应该可以通过执行以下操作从 &date 中减去 1 天:
%LET newDate = %SYSFUNC(%INTNX('day',&date,-1),date9.);
但是,这会产生错误:
错误:%SYSFUNC 或 %QSYSFUNC 宏函数引用中缺少函数名称。
我需要 &newDate 的输出在 date9.
任何帮助将不胜感激,谢谢!
快速回答:
%LET date = %SYSFUNC(TODAY());
%LET newDate = %SYSFUNC(INTNX(day,&date,-1),date9.);
%put &=newdate;
解释:
首先,最好从 &date
中删除格式,以确保它被正确解释为日期。您的原始代码(今天)在 intnx()
内解析为 12/06/2016,然后解析为 12 除以 6 除以 2016 - 等等
其次,%sysfunc()
的内部函数应该是一个数据步函数——事实上,%sysfunc()
的全部意义在于将这些函数引入 sas。 %intnx()
不是宏函数,但如果是,那么根据定义,您不需要将它包装在 %sysfunc()
中。
最后,'day' 参数不应被引用 - 默认情况下,sas 宏中的所有内容都被视为文本。
@RawFocus,你是对的,原始日期(今天的日期)不需要格式化,这样处理更容易。
为了完整起见,如果有人想应用 MMDDYY10.
格式,可以这样做:
%LET date = %SYSFUNC(TODAY(),mmddyy10.);
%LET newDate = %SYSFUNC(INTNX(day,%SYSFUNC(INPUTN(&date,mmddyy10)),-1),date9.);
%put &=date &=newdate;