Возвращает определенные даты за последние 16 лет

#sas #sas-macro

#sas #sas-макрос

Вопрос:

мне нужно выводить только конкретные даты от текущих до последних 16 лет.

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

Пример: если текущий квартал = 2020Q2, он должен вернуть (2020Q2,2019Q2,2018Q2 ……..) в определенном формате, который он выводит.

Код выглядит следующим образом:

 %let REPORTING_PERIOD_YYYYMMDD =20200630;
%let year_count   = 16;
%put amp;year_count;
%let val_date_current = %sysfunc(dhms(%sysfunc(inputn(amp;reporting_period_yyyymmdd., yymmdd8)),0, 0, 0));
%put amp;val_date_current;
%let val_date_first = %sysfunc(dhms(%sysfunc(intnx(year, %sysfunc(datepart(amp;val_date_current.)),-amp;year_count., end)), 0,0, 0));
%put amp;val_date_first;
%let val_date_count = %eval(%sysfunc(intck(dtquarter, amp;val_date_first., amp;val_date_current.))   1);
%put amp;val_date_count;

data Final;
do val_date_count=1 to amp;val_date_count.;
            val_date = intnx('quarter', datepart(amp;val_date_first.), val_date_count-1, 'end');
            arr_VAL_DATE = strip(put(val_date, ddmmyy10.));
            output;
end;
run;

  

Спасибо,
Читра

Комментарии:

1. почему вы используете quarter intnx функцию in? вы можете использовать year и в цикле do перейти от 1 к amp;year_count . do val_date_count=1 to amp;year_count.; val_date = intnx('year', datepart(amp;val_date_first.), -val_date_count, 'end'); и вместо ‘end’ вы можете использовать ‘same’, если текущая дата — это то, что вам нужно повторить.