SAS:创建一个包含两个日期之间所有月份的宏变量

SAS: Creating a macro variable containing all months between two dates

我有一个日期 yyyymm 格式的宏变量,其中 yyyyyear 就像 2020mm 是月份就像 02,如下图:

%let m=202002;

如何构造一个宏变量 m_new,它具有我们指定的过去的月份数?例如;如果 num 是 5,我们得到一个宏变量,它包含过去几个月的时间,包括它本身。像

%put &m_new.
    202002 202001 201912 201911 201910

这是一种方法

%let m=202002;
%let n=5;

data _null_;
   length dt_c $ 500;
   dt = input ("&m.", yymmn6.);
   dt_c = put(dt, yymmn6.);
   do i = 1 to &n.-1;
      dt_c = catx(' ', dt_c, put(intnx('month', dt, -i), yymmn6.));
   end;
   call symputx('m_new', dt_c);
run;

%put &m_new.;

结果:

202002 202001 201912 201911 201910

您可以使用宏(或者如果您已经在宏中,则只需 %DO 循环)。

问题是您需要将 YYYYMM 值转换为实际日期。然后您可以使用 INTNX() 生成新日期并使用 YYMMN6 格式化它们。格式以生成新的 YYYMM 字符串。

%macro months(start,number);
%local i date ;
%let date=%sysfunc(inputn(&start.01,yymmdd8));
%do i=0 %to %eval(&number-1); %sysfunc(intnx(month,&date,-&i),yymmn6)%end;
%mend ;

%put %months(start=202002,number=5);