SAS: создание макропеременной, содержащей все месяцы между двумя датами - PullRequest
2 голосов
/ 16 марта 2020

У меня есть макропеременная в формате даты yyyymm, где yyyy равно year как 2020, а mm соответствует месяцу как 02, как показано ниже:

%let m=202002;

Как я могу построить макропеременную m_new, имеющую столько месяцев в прошлом, сколько мы укажем? Например, если num равно 5, мы получим макропеременную, имеющую столько месяцев прошлого, включая саму. Что-то вроде

%put &m_new.
    202002 202001 201912 201911 201910

Ответы [ 2 ]

2 голосов
/ 16 марта 2020

Вы можете сделать это с помощью макроса (или просто% DO l oop, если вы уже находитесь внутри макроса).

Проблема в том, что вам необходимо преобразовать значения 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);
2 голосов
/ 16 марта 2020

Вот один из способов

%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
...