Here is a brute force approach with just two categories. I'm sure you'll get better solutions. Feels like there should be a format that would make this easier.... proc format ;
picture myfmtst (default=20)
low-high = '%B %dst'
(datatype = date)
;
picture myfmtth (default=20)
low-high = '%B %dth'
(datatype = date)
;
run ;
data have;
do offer_expiration="01Jan2014"d to "31Jan2014"d;
output;
end;
format offer_expiration mmddyy10.;
run;
data want;
set have;
if day(offer_expiration) in (1,21,31) then exp_dateA=put(offer_expiration,myfmtst.);
else exp_dateA=put(offer_expiration,myfmtth.);
run;
proc print;
run;
... View more