Hi there,
I wonder how to code the proc means to calculate the avarage of the values by id and visit.
example:
id | visit | value | avarage |
a | 1 | 10 | 20 |
a | 1 | 20 | |
a | 1 | 30 | |
a | 2 | 50 | 40 |
a | 2 | 30 | |
b | 1 | 10 | 15 |
b | 1 | 20 |
Thanks in advance.
Thank you so much!! Astounding!!
This is what exactly i want.
Happy New year!!
Try proc sql
data have;
input id $ visit value ;
cards;
a 1 10
a 1 20
a 1 30
a 2 50
a 2 30
b 1 10
b 1 20
;
proc sql;
create table test as select *, mean(value) as average from have group by id ,visit;
quit;
Thank you very much for your prompt reply.
It works!
we could also get the same via data step
data want;
do until(last.visit);
set have;
by id visit;
if first.visit then do;
s=value;
c=1;
end;
else do;
s+value;
c+1;
end;
average=s/c;
end;
do until(last.visit);
set have;
by id visit;
output;
end;
drop s c;
run;
Since you originally asked about PROC MEANS, here is what it would look like:
proc means data=have nway noprint;
var value;
class id visit;
output out=want (drop=_type_ _freq_) mean=average;
run;
Thank you so much!! Astounding!!
This is what exactly i want.
Happy New year!!
proc means data=have nway noprint ;
var value;
output out=test(drop=_TYPE_ _FREQ_)
mean= average;
class id visit ;
run;
Hope this help
Thank you, pritam
the solution is exactly the same as Astounding's post.
I love it.
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.