i figured it out!
it just required some logic and minor data manipulation.
data have;
length report section class1 class2 grp 8 var2 var1 var4 var3 $8;
do report=1;
do section = 1 to 2;
if section = 1 then do;
do class1=0 to 1;
do class2 = 4 to 1 by -1;
if class2 = 4 then class3 = " "; else class3=class2;
do grp = 1 to 2;
if class1 = 0 then do;
if class2 = 4 then do;
if grp = 1 then do;
var2="k"; var1="1"; var4=" "; var3=" ";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1=" "; var4=" "; var3=" ";output;
end;
end;
end;
else do;
if class2 = 3 then do;
if grp = 1 then do;
var2="k"; var1="z"; var4="z"; var3=" ";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4="y"; var3=" ";output;
end;
end;
end;
else do;
if class2 = 2 then do;
if grp = 1 then do;
var2="k"; var1="z"; var4="z"; var3=" ";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4="y"; var3=" ";output;
end;
end;
end;
else do;
if class2 = 1 then do;
if grp = 1 then do;
var2="k"; var1="z"; var4="z"; var3=" ";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4="y"; var3=" ";output;
end;
end;
end;
end;
end;
end;
end;
else do;
if class1 = 1 then do;
if class2 = 4 then do;
if grp = 1 then do;
var2="k"; var1="z"; var4=" "; var3=" ";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4=" "; var3=" ";output;
end;
end;
end;
else do;
if class2 = 3 then do;
if grp = 1 then do;
var2="k"; var1="z"; var4="z"; var3="s";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4="y"; var3="r";output;
end;
end;
end;
else do;
if class2 = 2 then do;
if grp = 1 then do;
var2="k"; var1="z"; var4="z"; var3="s";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4="y"; var3="r";output;
end;
end;
end;
else do;
if class2 = 1 then do;
if grp = 1 then do;
var2="k"; var1="z"; var4="z"; var3="s";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4="y"; var3="r";output;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
if section = 2 then do;
/* class3 = " ";*/
do class1=2;
do class2 = 4 to 1 by -1;
if class2 = 4 then class3 = " "; else class3=class2;
do grp = 1 to 2;
if class1 = 2 then do;
if class2 = 4 then do;
if grp = 1 then do;
var2=" "; var1="z"; var4=" "; var3=" ";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4=" "; var3=" ";output;
end;
end;
end;
else do;
if class2 = 3 then do;
if grp = 1 then do;
var2=" "; var1="z"; var4=" "; var3=" ";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4=" "; var3=" ";output;
end;
end;
end;
else do;
if class2 = 2 then do;
if grp = 1 then do;
var2=" "; var1="z"; var4=" "; var3=" ";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4=" "; var3=" ";output;
end;
end;
end;
else do;
if class2 = 1 then do;
if grp = 1 then do;
var2=" "; var1="z"; var4=" "; var3=" ";output;
end;
else do;
if grp = 2 then do;
var2=" "; var1="y"; var4=" "; var3=" ";output;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
run;
proc print data=have;
run;
proc report data=have nowd missing nocompleterows nocompletecols;
title "version 3: plain no formatting";
column report section class1 grp class2,(var2 var1 var3) class3,(var4) dummyvar;
define report/group noprint;
define section/group noprint;
define class1/group order=data width=6 nozero;
define grp/group noprint;
define class2/across order=data;
define var2/display width=8;
define var1/display width=8 nozero;
define var3/display width=8 nozero;
define class3/across order=data;
define var4/display width=8 nozero;
define dummyvar/computed noprint;
compute dummyvar;
dummyvar=1;
endcomp;
run;
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.