Макрос SAS зацикливание по дате, как указать правильный шаг?

Мне нужно создать 3 таблицы SAS по годам, кварталам и месяцам, которые будут охватывать определенный диапазон с сегодняшней даты. Я думаю, что есть более разумный способ сделать это, но у меня получилось что-то вроде (скажем, если мне нужно вернуться 5 лет назад):

    %macro asd;

%let today = %sysfunc(today());
%let end_year = %sysfunc(intnx(year,&today,-5));


proc sql;
create table years
(
Years num informat = date9. format = date9.
);

insert into years

%do i = &today. %to &end_year. %by -365;
%if i = &today.-365 %then %do;
values(&i.-1)
%end;
%else %do;
values(&i.) 
%end;
%end;
;
quit;

%mend asd;
%asd;
run;

Проблема в том, что я не знаю, как обозначить шаг в цикле в качестве периода даты, поэтому я получил точные цифры, которые меняются (для года - каждые 4 года, для месяца - каждого второго месяца, для кварталов - каждые 16 кварталов).

Я добавил цикл на год, чтобы попытаться учесть как минимум несколько високосных лет, но он не работает. Поэтому, прежде чем перейти к месяцам и, возможно, реализовать еще один вложенный цикл, я хотел бы спросить, есть ли более простой способ создания таких таблиц?

Спасибо!:)

1 ответ

Решение

Измените цикл на количество лет и вместо этого вычислите макропеременную, необходимую внутри цикла.

Пример - не макро версия.

 Do I=1 to 5;
     Year=intnx('year', date, 1);

      Rest of code;
 End;
Другие вопросы по тегам