2013-08-16 99 views
1

背景: 我有一個代碼,可以在當前日曆季度開始時從一年前開始提取事務性數據。 例如,如果我今天(2013年8月16日)運行代碼,它將必須從2012年7月1日起提取所有數據。使用SAS中的宏變量自動化開始日期

問題: 我想用宏變量自動化數據拉的開始日期。

到目前爲止,我被困在這裏:

%let ThisYear = %Sysfunc(Date(), YEAR.); 
%let LastYear= %eval(&ThisYear-1); /* I get the starting year */ 

%let QTR_start_month= %eval(3*%Sysfunc(Date(), qtr.)-2); /* this gives me the current quarter starting month. If I run it in August, it outputs 7 for July */ 

%let start_date=%str(01/%Sysfunc(month(&QTR_start_month))/&lcy); 

最終宏變量輸出這是我想要的日期,但在格式不被認可的SAS。

我將非常感謝任何幫助。 非常感謝提前!

回答

2

您可以該日的日期格式,或構建它像一個SAS日期文字(「01JUL2013」​​),DDMONYY(YY),或構建它作爲直接的日期值輸入。

INTNX可能是您構建它的最佳選擇;你不需要所有的工作。

%let start_date = %sysfunc(intnx(Quarter,%sysfunc(date()),-4),DATE9.); 
%put &start_date; 

您可以離開DATE9。將其用作日期文字,或刪除,DATE9.以獲取可直接使用的數值。你可以使用這個作爲"&start_Date."d來使用日期文字。

+0

非常感謝Joe! –

2

這應該做的工作。

data test; 
format todays_date starting_qtr date9.; 
todays_date=today(); 
/*this takes today's date and rolls back 4 qtrs and sets that date to the first day of that quarter*/ 
starting_qtr = intnx('qtr',todays_date,-4,'b'); 
/*so, running this code today, 16AUG2013 would yield starting_qtr=01JUL2012 */ 

call symputx('start_date', put(starting_qtr, date9.)); 

run; 

%put &start_date.; 
+0

好的答案 - 我喜歡把它放在SYSFUNC中,但是你在這裏展示了一些選項。 – Joe

+0

謝謝Sashikanth! –