SAS:创建一个包含两个日期之间所有月份的宏变量
SAS: Creating a macro variable containing all months between two dates
我有一个日期 yyyymm
格式的宏变量,其中 yyyy
是 year
就像 2020
而 mm
是月份就像 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);
我有一个日期 yyyymm
格式的宏变量,其中 yyyy
是 year
就像 2020
而 mm
是月份就像 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);