我正在寻找一种优雅的方式(或者,不这样,一种不优雅的方式)来计算不包括当前记录的平均值。所以,如果我有30个观察结果,我最终会得到30个不同的平均值。每个都是其他29个值的平均值。
根据这些数据,我想创建5个新的观测值,其中A,B和C的平均值不包括他们自己的数据。
A B C
Albert 12 4 6
Bob 14 7 12
Clyde 6 7 11
Dennis 9 11 7
Earl 8 8 6
我有一个模糊的想法,这将涉及一个循环内的proc sql。其他想法或方法表示赞赏。
答案 0 :(得分:0)
不需要循环。使用SQL获取每个变量的总计。没有当前观察的平均值是(总和 - 值)/(n-1)
data test;
input NAME $ A B C;
datalines;
Albert 12 4 6
Bob 14 7 12
Clyde 6 7 11
Dennis 9 11 7
Earl 8 8 6
;
run;
proc sql noprint;
select count(*),
sum(A),
sum(B),
sum(C)
into :n,
:a,
:b,
:c
from test;
quit;
data test2;
set test;
Ave_A = (&a - a)/(&n-1);
Ave_B = (&b - b)/(&n-1);
Ave_C = (&c - c)/(&n-1);
run;