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.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.