从宏变量中减去日期

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;