a********a 发帖数: 346 | 1 I have a dataset like the following:
data one;
input x y z;
datalines;
1 2 2
2 4 1
. 3 3
3 . 1
;
run;
when we use
proc means data=one;
run;
sas will tell the mean for x , y and z, if I want to know the overall mean
for x ,y and z together, i.e. I treat x,y and z as one variable, how should
I do?
Thanks a lot. |
d*****n 发帖数: 65 | 2 proc summary data=one;
var x y z;
output out=temp1(drop=_type_ _freq_) mean= ;
proc transpose data=temp1 out=temp2 prefix=mean;
proc summary data=temp2;
var mean1;
output out=data(drop=_type_ _freq_) mean= ;
run;
【在 a********a 的大作中提到】 : I have a dataset like the following: : data one; : input x y z; : datalines; : 1 2 2 : 2 4 1 : . 3 3 : 3 . 1 : ; : run;
|
d*****n 发帖数: 65 | 3 其实可以写个宏,但是变量列表有点麻烦
自己输入把
【在 d*****n 的大作中提到】 : proc summary data=one; : var x y z; : output out=temp1(drop=_type_ _freq_) mean= ; : proc transpose data=temp1 out=temp2 prefix=mean; : proc summary data=temp2; : var mean1; : output out=data(drop=_type_ _freq_) mean= ; : run;
|
a********a 发帖数: 346 | |
a********a 发帖数: 346 | 5 Is there anyway if I only treat x and y as one varialbe to get overall mean
of x and y, but treat z seperately to get mean of z only?
Thanks |
d*****n 发帖数: 65 | 6 sure。
you can look at the "proc transpose".
mean
【在 a********a 的大作中提到】 : Is there anyway if I only treat x and y as one varialbe to get overall mean : of x and y, but treat z seperately to get mean of z only? : Thanks
|
s*********e 发帖数: 1051 | 7 data two;
set one;
array a{*} _numeric_;
do i = 1 to dim(a);
xyz = a{i};
output;
end;
run;
proc means data = two n nmiss mean;
var xyz;
run; |
s*********e 发帖数: 1051 | 8 second one just for fun.
data one;
input x y z;
retain xyz n;
xyz + sum(x, y, z);
n + n(x, y, z);
datalines;
1 2 2
2 4 1
. 3 3
3 . 1
;
run;
data two;
set one end = eof;
if eof then do;
mean = xyz / n;
output;
end;
keep mean;
run; |
d*****n 发帖数: 65 | 9 good
【在 s*********e 的大作中提到】 : data two; : set one; : array a{*} _numeric_; : do i = 1 to dim(a); : xyz = a{i}; : output; : end; : run; : proc means data = two n nmiss mean; : var xyz;
|
d*****n 发帖数: 65 | 10 那就不如这样简单了
data oneppp(keep=mean) ;
set one end = L;
retain xyz n ;
xyz + mean(x, y, z); n+1;
mean=xyz/n;
if L;
run;
【在 s*********e 的大作中提到】 : second one just for fun. : data one; : input x y z; : retain xyz n; : xyz + sum(x, y, z); : n + n(x, y, z); : datalines; : 1 2 2 : 2 4 1 : . 3 3
|
|
|
p********a 发帖数: 5352 | 11 proc sql;
select mean(combo) from (select mean(x,y,z) as combo from one);
quit;
算MEAN,SQL永远最简单 |
s*********e 发帖数: 1051 | 12 小朋友,你的逻辑有错误。
【在 p********a 的大作中提到】 : proc sql; : select mean(combo) from (select mean(x,y,z) as combo from one); : quit; : 算MEAN,SQL永远最简单
|
p********a 发帖数: 5352 | 13 换个方法,逻辑就没问题了
proc sql;
select sum(combo1)/sum(comb2) from (select sum(x,y,z) as combo1,n(x,y,z) as
comb2 from one);
quit; |
a********a 发帖数: 346 | 14 Thank you all for these responses. |
x**7 发帖数: 341 | 15 不错
second one just for fun.
data one;
input x y z;
retain xyz n;
xyz + sum(x, y, z);
n + n(x, y, z);
datalines;
1 2 2
2 4 1
. 3 3
3 . 1
;
run;
data two;
set one end = eof;
if eof then do;
mean = xyz / n;
output;
end;
keep mean;
run;
【在 s*********e 的大作中提到】 : second one just for fun. : data one; : input x y z; : retain xyz n; : xyz + sum(x, y, z); : n + n(x, y, z); : datalines; : 1 2 2 : 2 4 1 : . 3 3
|