/*資料輸入*/
data test;
input a b @@;
cards;
1 0 1 0 1 1
2 1 2 0 2 1
;
/*計算第1層平均*/
proc sql;
create table group_mean as
select a, mean(b) as group_mean
from test
group by a;
quit;
/*計算總平均*/
proc sql;
create table mean2 as
select mean(group_mean) as total_mean
from group_mean;
quit;
是這樣嗎??
※ 引述《anovachen (囧)》之銘言:
: ※ 引述《mono1023 (阿沛)》之銘言:
: : 我的資料格式如下
: : a b
: : 1 0
: : 1 0
: : 1 1
: : 2 1
: : 2 0
: : 2 1
: : a是id b是數值
: : 我想要各自計算a為1時的平均值以及2時的平均值
: : 最後再加總起來計算幾何平均值
: ↑看不太懂這句話的意思...
: : 請問該如何寫程式碼?
: : 我只會proc means
: : var b
: : by a
: : 但好像只能算各自的
: : 新手先謝謝大家!!!
: data test;
: input a b @@;
: cards;
: 1 0 1 0 1 1
: 2 1 2 0 2 1
: ;
: run;
: proc means data=test;class a;var b;output out=avg1 mean=avg; run;
: data avg1; set avg1; where a <> .; ln_b=log(avg); run;
: proc means data=avg1; output out=avg2 mean=avg; var ln_b; run;
: data gmean; set avg2; gmean=exp(avg); run;
: proc print data=gmean; run;
: 如果不對a分層,直接算b的幾何平均,
: 會遇到一個問題是....
: 因為b有至少一個數字是0,
: 先取log,取算術平均再anti-log的做法會出問題。
: (log0無法定義)
: 先算連乘再開n次根號也是做得出來,
: 可是很沒有意義(明明就知道答案是零了,還寫那麼多程式= =)
: 所以我猜你要問的是a=1時b的算術平均和a=2時b的算術平均的幾何平均?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.240.141.22