⨳ the missing format: qyy ⨳
August 6, 2008
sas has a lot of date-related formats…roman numerals, julian dates, jewish calendars, etc.
today i came across the need to format dates by quarter similar to
yyq6. (as in
2008Q3), but instead
qyy6. (as in
Q32008). i needed to use the dates as variable names, so they have to start with a letter or underscore. since i was doing this in a transpose proc, i could’ve used the
prefix='_' option, but that would’ve looked odd (
so i decided to build a picture format. unfortunately, picture formats don’t have a quarter directive like they do for year, month, etc. so a homebrew method was in order.
data qyyfmt; retain fmtname 'qyy'; do y = 1995 to 2008; do q = 1 to 4; start=input(catx('q',y,q),yyq8.); end = intnx('qtr', start, 0, 'e'); label = catt('Q',q,y); output; end; end; run; proc format cntlin=qyyfmt; run;
done. i could’ve expanded this to all feasible recent and future dates
do y = 1900 to 2099;, but that’s an overkill for my current need.