2016-06-09 57 views
0

我正在使用SAS。我有更多的datesets,每月一个,我必须计算变化,手段等考虑更多datasets(月)在macro的同一步骤,因为例如对于VAR1我有一个数据集中的一月(月x)和二月份(月份x + 1)数据集中的一个值。如何使用一个宏变量像SAS中的日期那样滞后

datasets被命名为这样:xxxxxx_yearmonth(例如yearmonth = 201512为2015年12月)

所以我必须创建一个名为macro variableyearmonth可以滞后于个多月,所以我可以记得他们。

我想回忆一下macro variable yearmonth的数据集,并且这样做:yearmonth - 1 ... yearmonth - 2 ... yearmonth - n。但有一个问题,因为如果是2015年1月yearmonth=201501yearmonth-1=201500而不是201412。事实上,SAS不像日期那样识别yearmonth,而是将它看作简单的数字。

我该如何解决这个问题?

在此先感谢。

回答

0

将字符串转换为日期并使用INTNX()函数。

%let current=201501; 
%let prev=%sysfunc(intnx(month,%sysfunc(inputn(&current.01,yymmdd8)),-1),yymmn6); 
%put &=prev; 
0

尝试在组合使用intnxsysfunc和格式yymmn6。 喜欢的东西:

%let yearmonth1 = %sysfunc(intnx(month,%sysfunc(inputn(&yearmonth,yymmn6.)),-1),yymmn6.); 

或者更简单的datastep版本(也更好地通过它循环):

data _null_; 
do i = 1 to 6; 
    monthid = put(intnx('month',input("&yearmonth",yymmn6.),-i),yymmn6.); 
    call symput(cats('yearmonth',i),monthid); 
end; 
run;