BookmarkSubscribeRSS Feed
Altal
Calcite | Level 5

Hi everyone,

I was wondering if one can help with this proc tabulate code if it's possible to do at all!

I'm trying to get percentage of each analysis variable within the first row heading.

I put the code and attached an outcome doc.

I am cross tabulating vis (for visit) with flags for visit status (comp, miss, pending, drop). I'm setting each of these status variables as an "analysis" variable using VAR statement.

and trying to get percentage of each status from the (total within each visit, ie. not from the overall total  )

data have;

input comp miss pending drop vis id;

cards;

   .       .        1         .      3     001

   1       .        .         .      1     002

   1       .        .         .      2     002

   1       .        .         .      3     002

   1       .        .         .      1     003

   1       .        .         .      2     003

   1       .        .         .      3     003

   1       .        .         .      1     004

   .       1        .         .      2     004

   1       .        .         .      3     004

   1       .        .         .      1     005

   1       .        .         .      2     005

   1       .        .         .      3     005

   1       .        .         .      1     006

   1       .        .         .      2     006

   .       .        1         .      3     006

   .       .        1         .      3     007

   .       1        .         .      1     008

   .       1        .         .      2     008

   .       .        1         .      3     008

   1       .        .         .      1     009

   1       .        .         .      2     009

   .       .        1         .      3     009

   1       .        .         .      1     010

   .       .        1         .      2     010

   .       .        1         .      3     010

   .       .        .         1      1     011

   .       .        .         1      2     011

   .       .        .         1      3     011

   .       .        1         .      1     012

   .       .        1         .      2     012

   .       .        1         .      3     012

   .       .        1         .      1     013

   .       .        1         .      2     013

   .       .        1         .      3     013

   1       .        .         .      1     014

   1       .        .         .      2     014

   1       .        .         .      3     014

run;

proc tabulate data=have  missing format=6. ;

  class vis ;

  var comp miss pending  drop;

  tables vis *( n (comp miss pending  drop)*(sum='' ) ), all /rts=30 row=float;

run;

/*** I'm trying to obtain percentage of each status each visit using the code below, but the percentage

     I'm getting is for the flag within itself not within the visit  ***/

proc tabulate data=have   format=6. ;

  class vis ;

  var comp miss pending  drop;

  tables vis *( n (comp miss pending  drop)*(sum=''  pctn<vis all >) ), all /rts=30 row=float;

run;

so for example, for the first visit, for comp, I wanna get percentage of 8/12=66.6% and so on... instead I'm getting 42% which is 8/19 (and 19 is the total number of comp=1 in the dataset)

Thanks

4 REPLIES 4
ballardw
Super User

One way is to code all those missing to 0 then use

tables vis *( n (comp miss pending  drop)*(sum=''  mean='%'*f=perecent8.) ), all /rts=30 row=float;

Altal
Calcite | Level 5

Yes; that would work

data have;

  set have;

  comp=sum(comp,0);miss=sum(miss,0); pending=sum(pending,0); drop=sum(drop,0);

run;

proc tabulate data=have   format=6. ;

  class vis ;

  var comp miss pending  drop;

  tables vis *( n (comp miss pending  drop)*(sum=''  mean='%'*f=percent.) ), all /rts=30 row=float;

run;

Is there a way to do it without converting the missing to zeros?

DR_Majeti
Quartz | Level 8

Hi,

I think,

If we do not convert them into zero it will take only the non-miss value observations for the calculation, then the percentage will change what we need...

I faced same problem once but, I got what I required without converting missing to zeros.

Please correct if i am wrong..  Ballardw or Altal.

ballardw
Super User

The Proc Tabulate ability to specify denominators for percentage calculations is limited. Depending on the way you want your final table to look sometimes the PCTN< > or PCTSUM<> just don't work. I often use the 0/1 coding for the analysis variables as then I can get expected N, Sum and Mean for percent without much difficulty though I usually use a custom format instead of PercentX. display in the manner I want.

About 80% of my cases of crashing SAS involve attempts to get PCTN or PCTSUM to work as apparently some of the combinations aren't valid but are not invalid in the syntax checker.

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

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
  • 4 replies
  • 1766 views
  • 3 likes
  • 3 in conversation