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!!

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 3 replies
  • 8297 views
  • 5 likes
  • 3 in conversation