- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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?
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Thanks guys, it helped!!