Hello all!
I'm rather rusty at SAS and was hoping for a bit of help. I have 5 binary variables and want to know how many observations reported "yes" for all 5 of them. Is there a way to do this? Thank you!
Well, if you have something like:
data have; var1=1; var2=0; var3=1; var4=1; output; var1=1; var2=1; var3=1; var4=1; output; run; data want; set have end=last; retain result 0; array var{4}; if sum(of var{*})=4 then result=sum(result,1); if last then output; run;
There are indeed many different ways to achieve this. I agree with @Reeza that it's nice to see all combinations. Here is an alternative to the "table binary1*binary2*binary3*binary4*binary5" approach with PROC FREQ. (Sometimes I have encountered memory shortage issues when applying such a 5- or higher-dimensional cross-table request to a large dataset.)
data have; /* just to create dummy data */
array var a b c d e;
do j=1 to 100;
do i=1 to 5;
var[i]=(ranuni(314159)<0.5);
end;
output;
end;
drop i j;
run;
data combi;
set have;
length comb $5;
comb=cats(of a--e); /* creates the combinations like '01101' */
run;
proc freq data=combi;
tables comb;
run;
Or you could use PROC SQL without creating a new dataset (like COMBI above):
proc sql;
select a, b, c, d, e, count(*) as cnt
from have
group by a, b, c, d, e;
quit;
@Reeza @RW9 @FreelanceReinhard Thank you all for your replies!
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.