0

我正在寻找一种优雅的方式(或者,如果失败,一种不优雅的方式)来计算不包括当前记录的平均值。所以,如果我有 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。其他想法或方法表示赞赏。

4

1 回答 1

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;
于 2013-10-19T15:57:50.927 回答