看板 Statistics 關於我們 聯絡資訊
/*資料輸入*/ 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