n% of total observation

Accepted Solution Solved
Reply
New Contributor
Posts: 4
Accepted Solution

n% of total observation

Hello,

For each observation I would like to create a variable showing the percentage of the total observation. To put it simply, let's say I have 100 observations and i want to see the "8%" in the 8th observation (kind of percentiles).

I am aware of Proc UNIVARIATE;  PCTLPTS= but couldn't find a good example application of it :smileyplain: Could anyone suggest an easy solution?

Many thanks!


Accepted Solutions
Solution
‎12-13-2012 06:37 AM
Super Contributor
Posts: 1,636

Re: n% of total observation

Is this what you want?

data calss;

  set sashelp.class nobs=nobs;

  per=_n_/nobs;

  format per percent6.2;

run;

proc print;run;

Obs    Name       Sex    Age    Height    Weight       per

              1    Alfred      M      14     69.0      112.5     5.3%

              2    Alice       F      13     56.5       84.0      11%

              3    Barbara     F      13     65.3       98.0      16%

              4    Carol       F      14     62.8      102.5      21%

              5    Henry       M      14     63.5      102.5      26%

              6    James       M      12     57.3       83.0      32%

              7    Jane        F      12     59.8       84.5      37%

              8    Janet       F      15     62.5      112.5      42%

              9    Jeffrey     M      13     62.5       84.0      47%

             10    John        M      12     59.0       99.5      53%

             11    Joyce       F      11     51.3       50.5      58%

             12    Judy        F      14     64.3       90.0      63%

             13    Louise      F      12     56.3       77.0      68%

             14    Mary        F      15     66.5      112.0      74%

             15    Philip      M      16     72.0      150.0      79%

             16    Robert      M      12     64.8      128.0      84%

             17    Ronald      M      15     67.0      133.0      89%

             18    Thomas      M      11     57.5       85.0      95%

             19    William     M      15     66.5      112.0     100%

View solution in original post


All Replies
Solution
‎12-13-2012 06:37 AM
Super Contributor
Posts: 1,636

Re: n% of total observation

Is this what you want?

data calss;

  set sashelp.class nobs=nobs;

  per=_n_/nobs;

  format per percent6.2;

run;

proc print;run;

Obs    Name       Sex    Age    Height    Weight       per

              1    Alfred      M      14     69.0      112.5     5.3%

              2    Alice       F      13     56.5       84.0      11%

              3    Barbara     F      13     65.3       98.0      16%

              4    Carol       F      14     62.8      102.5      21%

              5    Henry       M      14     63.5      102.5      26%

              6    James       M      12     57.3       83.0      32%

              7    Jane        F      12     59.8       84.5      37%

              8    Janet       F      15     62.5      112.5      42%

              9    Jeffrey     M      13     62.5       84.0      47%

             10    John        M      12     59.0       99.5      53%

             11    Joyce       F      11     51.3       50.5      58%

             12    Judy        F      14     64.3       90.0      63%

             13    Louise      F      12     56.3       77.0      68%

             14    Mary        F      15     66.5      112.0      74%

             15    Philip      M      16     72.0      150.0      79%

             16    Robert      M      12     64.8      128.0      84%

             17    Ronald      M      15     67.0      133.0      89%

             18    Thomas      M      11     57.5       85.0      95%

             19    William     M      15     66.5      112.0     100%

New Contributor
Posts: 4

Re: n% of total observation

Hello Linlin,

Thank you for the prompt and quick answer! If I may ask one more thing to enhance the question.. what if I want to see the percent by group - in the same output dataset? For this example, how can we group the percent answer for males and females separately?

Super Contributor
Posts: 1,636

Re: n% of total observation

Hi,

Is this what you want?

data calss;
do until(done1);
  set sashelp.class end=done1;
  if upcase(sex)='F' then girls+1;
    else boys+1;
  end;
  do until(done2);
   set sashelp.class end=done2 nobs=nobs;
  if upcase(sex)='F' then g+1;
    else b+1;
n+1;
  percent_t=n/nobs;
  percent_f=g/girls;
  percen_m=b/boys;
  output;
end;
  format per: percent8.2;
run;
proc print;run;                                        percent_  percent_
   Obs  Name     Sex  Age  Height  Weight  girls  boys  g   b   n     t         f      percen_m

     1  Alfred    M    14   69.0    112.5    9     10   0   1   1    5.3%      .00%       10%
     2  Alice     F    13   56.5     84.0    9     10   1   1   2     11%       11%       10%
     3  Barbara   F    13   65.3     98.0    9     10   2   1   3     16%       22%       10%
     4  Carol     F    14   62.8    102.5    9     10   3   1   4     21%       33%       10%
     5  Henry     M    14   63.5    102.5    9     10   3   2   5     26%       33%       20%
     6  James     M    12   57.3     83.0    9     10   3   3   6     32%       33%       30%
     7  Jane      F    12   59.8     84.5    9     10   4   3   7     37%       44%       30%
     8  Janet     F    15   62.5    112.5    9     10   5   3   8     42%       56%       30%
     9  Jeffrey   M    13   62.5     84.0    9     10   5   4   9     47%       56%       40%
    10  John      M    12   59.0     99.5    9     10   5   5  10     53%       56%       50%
    11  Joyce     F    11   51.3     50.5    9     10   6   5  11     58%       67%       50%
    12  Judy      F    14   64.3     90.0    9     10   7   5  12     63%       78%       50%
    13  Louise    F    12   56.3     77.0    9     10   8   5  13     68%       89%       50%
    14  Mary      F    15   66.5    112.0    9     10   9   5  14     74%      100%       50%
    15  Philip    M    16   72.0    150.0    9     10   9   6  15     79%      100%       60%
    16  Robert    M    12   64.8    128.0    9     10   9   7  16     84%      100%       70%
    17  Ronald    M    15   67.0    133.0    9     10   9   8  17     89%      100%       80%
    18  Thomas    M    11   57.5     85.0    9     10   9   9  18     95%      100%       90%
    19  William   M    15   66.5    112.0    9     10   9  10  19    100%      100%      100%

New Contributor
Posts: 4

Re: n% of total observation

Awesome.. Thanks!

PROC Star
Posts: 1,090

Re: n% of total observation

Here's another option:

data work.class;
set sashelp.class;
varseq = _n_;
run;

proc sort data=work.class;
by sex;

proc rank data = work.class groups=100 ties=mean out=work.rankedclass;
by sex;
var varseq;
ranks varseq_rank;
run;

Tom

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 5 replies
  • 426 views
  • 6 likes
  • 3 in conversation