BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Sathish_jammy
Lapis Lazuli | Level 10

Dear Experts,

 

I have a Questionnaire type dataset to evaluate the value of the boolean type (Y/N) questions.

I shared the sample dataset below for better understanding.

data aaa;
input ID Emp$ Gen$ Q1$ Q2$ Q3$ Q4$ Q5$;
cards;
132 Govt M Y N N N N
321 Prvt F N Y Y N N
159 Prvt F Y Y N N N
357 Govt M N N N N Y
;

I have to calculate the N(sum) and % of how many Y (Yes) checked.

I expect the result as

 

tab.jpg

I tried with Proc Tabulate but it returns partial output.

proc tabulate data = aaa;
class Q1 Q2 Q3 Q4 Q5 Emp Gen;
tables (Q1 Q2 Q3 Q4 Q5)* all, Emp*(Gen);
run;

Please suggest a solution to solve the given problem.

Thanks in advance! 

1 ACCEPTED SOLUTION

Accepted Solutions
Ksharp
Super User
data aaa;
input ID Emp$ Gen$ Q1$ Q2$ Q3$ Q4$ Q5$;
cards;
132 Govt M Y N N N N
321 Prvt F N Y Y N N
159 Prvt F Y Y N N N
357 Govt M N N N N Y
;
proc transpose data=aaa out=have(where=(col1='Y'));
by id emp gen notsorted;
var Q:;
run;

proc format ;
value $ fmt(notsorted)
 'M'='M'
 'F'='F';
run;
proc tabulate data = have;
class _name_ Emp Gen / preloadfmt order=data;
format gen $fmt.;
tables _name_=' ' all, Emp=' '*Gen=' '*(n colpctn='%')*f=8.0 /printmiss;
run;

View solution in original post

3 REPLIES 3
Ksharp
Super User
data aaa;
input ID Emp$ Gen$ Q1$ Q2$ Q3$ Q4$ Q5$;
cards;
132 Govt M Y N N N N
321 Prvt F N Y Y N N
159 Prvt F Y Y N N N
357 Govt M N N N N Y
;
proc transpose data=aaa out=have(where=(col1='Y'));
by id emp gen notsorted;
var Q:;
run;
proc tabulate data = have;
class _name_ Emp Gen;
tables _name_=' ' all, Emp=' '*Gen=' '*(n colpctn='%')*f=8.0;
run;
Ksharp
Super User
data aaa;
input ID Emp$ Gen$ Q1$ Q2$ Q3$ Q4$ Q5$;
cards;
132 Govt M Y N N N N
321 Prvt F N Y Y N N
159 Prvt F Y Y N N N
357 Govt M N N N N Y
;
proc transpose data=aaa out=have(where=(col1='Y'));
by id emp gen notsorted;
var Q:;
run;

proc format ;
value $ fmt(notsorted)
 'M'='M'
 'F'='F';
run;
proc tabulate data = have;
class _name_ Emp Gen / preloadfmt order=data;
format gen $fmt.;
tables _name_=' ' all, Emp=' '*Gen=' '*(n colpctn='%')*f=8.0 /printmiss;
run;
Sathish_jammy
Lapis Lazuli | Level 10

Thank you so much @Ksharp . Both solutions fit my expected result.

Once again Thanks for your time and consideration.

sas-innovate-white.png

Missed SAS Innovate in Orlando?

Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.

 

Register now

What is Bayesian Analysis?

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 950 views
  • 0 likes
  • 2 in conversation