Paul,
Hopefully someone else can provide a more straight-forward way of doing this but, based on your original sample data and a very limited number of groupings (they would have to be expanded of course), the following is one way to achieve what I think you want:
proc format;
value timespan
low-0.0834='1 Month'
0.0835-0.167='2 Months'
0.168-0.2501='3 Months'
other='> 3 Months';
run;
data have;
informat cnty_name $20.;
informat description $30.;
informat start_date end_date date9.;
format start_date date9.;
input id cnty_name description agecat4 year start_date end_date;
exitMonthCategory=yrdif(start_date, end_date, 'AGE');
cards;
2 Hopeland Outcome-2940 1 2006 8feb2012 11nov2012
1 Hopeland Outcome-2940 1 2006 8jan2012 11nov2012
3 Hopeland Outcome-2940 2 2006 8aug2012 11nov2012
5 Hopeland Outcome-2940 2 2006 8oct2012 11nov2012
4 Hopeland Outcome-2940 2 2006 8sep2012 11nov2012
1 Nohopeland Outcome-2940 1 2006 8jan2012 11nov2012
2 Nohopeland Outcome-2940 1 2006 8feb2012 11nov2012
3 Nohopeland Outcome-2940 3 2006 8aug2012 11nov2012
4 Nohopeland Outcome-2940 3 2006 8sep2012 11nov2012
5 Nohopeland Outcome-2940 3 2006 12oct2012 11nov2012
;
proc freq data=have noprint;
tables cnty_name*agecat4*exitMonthCategory/out=test;
format exitMonthCategory timespan.;
run;
options validvarname=any;
proc transpose data=test out=want (drop=_label_
rename=(_name_=DataElement));
by cnty_name agecat4;
id exitMonthCategory;
run;
data want;
retain cnty_name agecat4 DataElement
'1 Month'n
'2 Months'n
'3 Months'n
'> 3 Months'n;
set want;
run;