如何使用宏变量像SAS中的日期一样滞后

时间:2016-06-09 11:15:55

标签: macros sas

我正在使用SAS。我有更多datesets,每月一个,我必须在datasets的同一步骤中考虑更多macro(月)来计算变化,等等,因为例如{{1}我在january(月x)的数据集中有一个值,在二月的数据集中有一个值(月x + 1)。

VAR1以这种方式命名:datasets(例如2015年12月的年月= 201512)

所以我必须创建一个名为xxxxxx_yearmonth的{​​{1}},可以滞后几个月,以便回忆起来。

我想回忆一下macro variable个月的数据集,并执行:yearmonth。但是有一个问题,因为如果是2015年1月macro variableyearmonth - 1 ... yearmonth - 2 ... yearmonth - n而不是yearmonth=201501。事实是,yearmonth-1=201500并不像日期那样认识到年份,而是将其视为一个简单的数字。

如何解决此问题?

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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;