Your code screams for using a formula.
You want a string consisting of a running count of months (starting at a given point in time), followed by a colon and the monthname+year, separated by a blank.
See this formula:
%let start = %sysevalf("31mar2019"d);
trademonth =
put(intck("month",&start.,csa_inv_dte),2.) !!
":" !!
upcase(put(csa_inv_dte,monname3.)) !!
" " !!
put(csa_inv_dte,year4.)
;
Applied to some fake data:
%let start = %sysevalf("31mar2019"d);
data want;
input csa_inv_dte :yymmdd10.;
format csa_inv_dte yymmdd10.;
trademonth =
put(intck("month",&start.,csa_inv_dte),2.) !!
":" !!
upcase(put(csa_inv_dte,monname3.)) !!
" " !!
put(csa_inv_dte,year4.)
;
datalines;
2020-03-05
2022-04-06
;
... View more