2016-12-06 129 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;