SAS Procedures

Help using Base SAS procedures
BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
DrZenith
Calcite | Level 5

Hey guys...

I have a dataset like this,

Id      Val1      val2      val3      val4 ......valn     mean     mode      median     std

1        10        20         30          40...    

2         25      13          34          12....

.

.

n

For each row (for each id) i need to find out mean, mode, median and standard deviation and fill the values in the respective columns.

How do I do that efficiently?

1 ACCEPTED SOLUTION

Accepted Solutions
ballardw
Super User

3 of these are easy in a datastep;

data new;

     set <your data>;

     mean = mean (of val1-valn);

     median=median (of val1-valn);

     std = std (of val1-valn);

/* mode could have issues with tie breakers and such the following selects the first VALi */

/* and no claim to efficiency you may want to drop the c1 c2 i and such*/

array v val1-valn;

c2= 0;

do _i_ = 1 to (dim(v) -1);

  c1= 1;

  do _j_ = (_i_+1) to dim(v);

    c1= c1 + (v[_i_]=v[_j_]);

  end;

  if c1 gt c2 then do;

    c2=c1;

    i=_i_;

  end;

  mode= v;

end;

run;

View solution in original post

3 REPLIES 3
ballardw
Super User

3 of these are easy in a datastep;

data new;

     set <your data>;

     mean = mean (of val1-valn);

     median=median (of val1-valn);

     std = std (of val1-valn);

/* mode could have issues with tie breakers and such the following selects the first VALi */

/* and no claim to efficiency you may want to drop the c1 c2 i and such*/

array v val1-valn;

c2= 0;

do _i_ = 1 to (dim(v) -1);

  c1= 1;

  do _j_ = (_i_+1) to dim(v);

    c1= c1 + (v[_i_]=v[_j_]);

  end;

  if c1 gt c2 then do;

    c2=c1;

    i=_i_;

  end;

  mode= v;

end;

run;

art297
Opal | Level 21

The following doesn't account for tied modes either, but you may find it easier to code:

data have;

  input Id  Val1 val2 val3 val4 valn;

  cards;

1  10  20  20  30  40

2  25  13  34  13  25

;

proc transpose data=have out=long;

  var val:;

  by id;

run;

proc summary data=long;

  var col1;

  by id;

  output out=want  mean=mean median=median std=std mode=mode;

run;

DrZenith
Calcite | Level 5

Thanks guys, it helped!!

sas-innovate-white.png

Join us for our biggest event of the year!

Four days of inspiring keynotes, product reveals, hands-on learning opportunities, deep-dive demos, and peer-led breakouts. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

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
  • 8791 views
  • 5 likes
  • 3 in conversation