Summary output table want:
Questions | All | Female | Male | ||||||
N | n | % | N | n | % | N | n | % | |
Q1 | 12 | 8 | 66.7 | 5 | 3 | 60.0 | 7 | 5 | 71.4 |
Q2 | 11 | 6 | 54.5 | 4 | 2 | 50.0 | 7 | 4 | 57.1 |
SubjectID | Q1 (1=Correct, 2=Incorrect) | Q2(1=Correct, 2=Incorrect) | Gender (F=Female, M=Male) |
01-106 | 1 | 1 | M |
01-205 | 1 | 1 | F |
01-714 | 1 | 2 | M |
01-201 | 2 | 2 | F |
01-703 | 1 | . | F |
01-102 | 2 | 2 | M |
01-504 | 1 | 1 | M |
01-101 | 2 | 2 | M |
01-106 | 1 | 1 | F |
01-205 | 1 | 1 | M |
01-714 | 2 | 2 | F |
01-201 | 1 | 1 | M |
data have; input SubjectID $ Q1 Q2 Gender $; datalines; 01-106 1 1 M 01-205 1 1 F 01-714 1 2 M 01-201 2 2 F 01-703 1 . F 01-102 2 2 M 01-504 1 1 M 01-101 2 2 M 01-106 1 1 F 01-205 1 1 M 01-714 2 2 F 01-201 1 1 M ; data need; set have; array q (*) q1 q2; do i=1 to dim(q); if q[i] then q[i]=(q[i]=1); end; drop i; run; proc format; value $gender 'F'='Female' 'M'='Male' ; proc tabulate data=need; class gender; format gender $gender.; var q1 q2; table q1 q2, (All gender=' ') *(n='n' sum='Correct'*f=best. mean='%'*f=percent8.1) /misstext=' ' ; run;
Not going to make a data set from CSV as my choices may vary from yours and would not duplicate. So using some of the data as shown.
When you want a two level variable to only report on one meaning creating a 1/0 coded numeric is often a good choice because the N statistic still works, sum becomes the number of ones values and mean is the decimal percentage of ones.
data have; input SubjectID $ Q1 Q2 Gender $; datalines; 01-106 1 1 M 01-205 1 1 F 01-714 1 2 M 01-201 2 2 F 01-703 1 . F 01-102 2 2 M 01-504 1 1 M 01-101 2 2 M 01-106 1 1 F 01-205 1 1 M 01-714 2 2 F 01-201 1 1 M ; data need; set have; array q (*) q1 q2; do i=1 to dim(q); if q[i] then q[i]=(q[i]=1); end; drop i; run; proc format; value $gender 'F'='Female' 'M'='Male' ; proc tabulate data=need; class gender; format gender $gender.; var q1 q2; table q1 q2, (All gender=' ') *(n='n' sum='Correct'*f=best. mean='%'*f=percent8.1) /misstext=' ' ; run;
Not going to make a data set from CSV as my choices may vary from yours and would not duplicate. So using some of the data as shown.
When you want a two level variable to only report on one meaning creating a 1/0 coded numeric is often a good choice because the N statistic still works, sum becomes the number of ones values and mean is the decimal percentage of ones.
Thank you. Perfect!
Just a quick question, Can we do the same using proc Report?
Best regards,
Akter
@Akter wrote:
Thank you. Perfect!
Just a quick question, Can we do the same using proc Report?
Best regards,
Akter
Yes. BUT because you have two different variables in a column, your Q1 and Q2, you would need to completely reshape your data set so that t Q1 and Q2 became the value of a different variable.
Report wants a column to be a single variable or statistic.
Multiple nestings in both row and column are one of Proc Tabulates strong points (as well as multiple differently structured table statements in a single procedure call). However to go with that it does not allow you to use the result of a row/column calculation in another location which Proc Report does.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.
Find more tutorials on the SAS Users YouTube channel.