You can use INTNX() to increment by quarter. You need to provide a start date and an end date. Let's call those STARTDT and ENDDT.
%let startdt='01JAN2016'd;
%let enddt='01OCT2019'd;
These things are easier in data step than in macro code:
data _null_;
do offset=0 to intck('qtr',&startdt,&enddt);
dt=intnx('qtr',&startdt,offset);
yr=year(dt)-2000;
qtr=qtr(dt);
mon=put(dt,monname3.);
call execute(cats('%nrstr(%yearqtr)(YR=',yr,',QTR=',qtr,'MON=',mon,')'));
end;
run;
But you could do it in a macro.
%macro qtr(startdt,enddt);
%local offset dt yr qtr mon ;
%do offset=0 %to %sysfunc(intck(qtr,&startdt,&enddt));
%let dt=%sysfunc(intnx(qtr,&startdt,&offset));
%let yr=%eval(%sysfunc(year(&dt)))-2000);
%let qtr=%sysfunc(qtr(&dt));
%let mon=%sysfunc(putn(&dt,monname3.));
%yearqtr(YR=&yr,QTR=&qtr,MON=&mon)
%end;
%mend;
%qtr(&startdt,&enddt);
... View more