One way to go is to reshape your data so it's easy to use with Proc's like Tabulate or Report.
Below code is fully working with the sample data you shared.
data prep;
set have;
array vars{*} form2 case32 event46;
length form_name $32;
length report_form_name $32;
do _i=1 to dim(vars);
form_cnt=sum(form_cnt, vars(_i)>0);
max_day_grp=max(max_day_grp,vars(_i));
end;
if form_cnt=0 then
do;
max_day_grp=99;
output;
end;
else
if form_cnt>0 then
do;
do form_id=1 to dim(vars);
if vars(form_id)>0 then
do;
form_name=propcase(vname(vars(form_id)));
day_grp=vars(form_id);
if form_cnt=1 then report_form_id=form_id;
else report_form_id=99;
if form_cnt=1 then
do;
report_form_name=catx('_',form_name,grp);
report_grp=grp;
end;
else
do;
report_form_name='Multiple';
report_grp=' ';
end;
output;
end;
end;
end;
drop form2 case32 event46 _i;
run;
proc format;
value form_type
1 ='Form2'
2 ='Case32'
3 ='Event46'
99='Multiple'
;
value day_grp
1 ='0-30 days'
2 ='31-60 days'
99='Did not complete any form within 0-60 days'
;
value form_cnt
1 ='Single'
2-high='Multi-Form'
;
run;
%let sv_missing=%sysfunc(getoption(missing,keyword));
options missing=' ';
title 'Table 1: Option 1';
proc tabulate data=prep(where=(form_cnt>0)) missing;
class category report_grp report_form_id form_cnt max_day_grp;
format max_day_grp day_grp. report_form_id form_type. form_cnt form_cnt.;
table
category=' '*max_day_grp=' ' all='Total',
(form_cnt=' '*report_grp=' '*report_form_id=' ' all='Total')*n=' '
;
run;
title;
title 'Table 1: Option 2';
proc tabulate data=prep(where=(form_cnt>0)) missing;
class category report_form_name form_cnt max_day_grp;
format max_day_grp day_grp. report_form_id form_type. form_cnt form_cnt.;
table
category=' '*max_day_grp=' ' all='Total',
(form_cnt=' '*report_form_name=' ' all='Total')*n=' '
;
run;
title;
title 'Table 2';
proc tabulate data=prep(where=(form_cnt=0)) missing;
class category max_day_grp;
format max_day_grp day_grp.;
table
category=' '*max_day_grp=' ' all='Total',
all='Total'*n=' '
;
run;
title;
options &sv_missing;
... View more