2016-12-06 128 views
0

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

目前,我通过运行创建宏变量:

%LET date = %SYSFUNC(TODAY(),MMDDYY10.); 

我觉得我应该可以做从&日期减去1天以下:

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

然而,这会产生错误:

错误:函数名缺失%SYSFUNC或%QSYSFUNC宏函数引用。

我需要& newDate输出是在date9。

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

回答

2

快速回答:

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

说明:

首先,最好从&date删除格式,以确保它被正确解释为日期。您的原始代码在intnx()到12/06/2016之间解决(今天),然后解决到12除以6除以2016 - 等

其次,%sysfunc()的内部函数应该是一个datastep函数 - 的确,整点%sysfunc()就是把这些函数变成sas。 %intnx()不是一个宏函数,但如果是,那么根据定义,您将不需要将其包装在%sysfunc()中。

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

+0

我会接受这个作为答案。我将所需的一切都推到了数据步骤中,并获得了所需的输出。长话短说,不要试图在一行上完成所有这些,而要使用数据步骤。 –

+0

@JoshuaSchlichting我认为没有理由不在宏语言中这样做,一般来说,你只是没有正确理解它 - 但如果你不理解宏语言,这是一个很好的理由把它放在一个数据步骤当然! – Joe

0

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

只是为了保持完整性,如果有人想申请的MMDDYY10.格式,这是它如何做到:

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