0
你好,我試圖將這個程序中的日期轉換爲數字,程序生成日期爲今天的12個月。我希望結果看起來像第一列「date0」20140731但是我想date0列以及生成的每個列是數字,這可能嗎?SAS Maco程序字符到數字
%global year0 month0 days;
%let dt=%sysfunc(today());
%let year0=%sysfunc(year(&dt));
%let month0=%sysfunc(month(&dt),z2);
%let period=12;
%macro setlastday(m,y);
%if &m=12 %then %let days=31;
%else %if &m=11 %then %let days=30;
%else %if &m=10 %then %let days=31;
%else %if &m= 09 %then %let days=30;
%else %if &m= 08 %then %let days=31;
%else %if &m= 07 %then %let days=31;
%else %if &m= 06 %then %let days=30;
%else %if &m= 05 %then %let days=31;
%else %if &m= 04 %then %let days=30;
%else %if &m= 03 %then %let days=31;
%else %if &m= 02 %then
%do;
%if %sysfunc(mod(&y,4))=0
%then %let days=29;
%else %let days=28;
%end;
%else %if &m= 1 %then %let days=31;
%mend;
%macro setdate;
data TEST;
%do i=0 %to .
%global t&i /*ds&i*/;
%setlastday(&&month&i,&&year&i);
date&i="&&year&i.&&&month&i.&&days.";
call symput("t&i",date&i);
call symput("ds&i",
"ds&&year&i."||put(&&month&i,z2.));
%let j=%eval(&i+1);
%if %eval(&&month&i)=1 %then
%do;
%let year&j=%eval(&&year&i-1);
%let month&j=12;
%end;
%else
%do;
%let year&j=%eval(&&year&i);
%let month&j=%eval(&&month&i-1);
%end;
%end;
run;
%mend;
%setdate;
你爲什麼要這麼做? SAS內置了用於日期計算的函數('intnx','intck'及其親屬)。這是很多代碼來完成一些你可以使用內置函數更容易完成的事情(並且,最重要的是,你將在2100年出現問題,這不是閏年)。 – Joe
這是有幫助的:https://gist.github.com/statgeek/9606118 – Reeza
更不用說,你可以做所有這些,而不使用複雜的宏語法,正如Joe所說的,只需使用內置函數和datastep代碼。 –