Given that you're new to SAS you might not realize yet that working with a narrow table structure is very often advantageous.
Consider to structure your data as below. Whether you want to create rows where the value for a var<n> variable is missing depends a bit on how you intend to use the data. But it's of course also never a big problem to add such missing rows later for some specific use cases. And some SAS Proc's also allow to just create a second "template" table with all the cross sections you want to see in a report independent if this data exists in the base table or not.
ID
Month
index
value
ABC1
1
2
Y
ABC3
1
1
Y
ABC5
1
2
Y
ABC1
2
1
Y
ABC1
2
2
Y
ABC2
2
2
Y
ABC4
2
1
Y
Here a sample how to create such a structure and report on it
data have;
infile cards truncover expandtabs;
input (ID Month Var1 Var2) ($);
cards;
ABC1 1 . Y
ABC2 1 . .
ABC3 1 Y .
ABC4 1 . .
ABC5 1 . Y
ABC1 2 Y Y
ABC2 2 . Y
ABC3 2 . .
ABC4 2 Y .
ABC5 2 . .
;
data want;
set have;
by month id;
array vars {*} var1-var2;
do index=1 to dim(vars);
value=vars[index];
output;
end;
drop var1-var2;
run;
proc tabulate data=want missing;
class Month index value;
keylabel n=' ';
table month, index*value;
run;
... View more