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.
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.
Ready to level-up your skills? Choose your own adventure.