0

現在のレコードを含まない平均を計算するエレガントな方法 (または、そうでない場合はエレガントでない方法) を探しています。したがって、30 個の観測値がある場合、30 個の異なる平均値が得られます。それぞれが他の 29 個の値の平均になります。

この作成されたデータから、A、B、および C の平均を使用して、独自のデータを含まない 5 つの新しい観測を作成したいと考えています。

        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 に答える