1

PROC FACTOR の係数を固有値で重み付けしようとしていますが、問題があります。私には解決策がありますが、これを行うためのより直接的な方法があるべきだと私には思えます。

** Get factors and eigenvalues;
ods output Eigenvalues=MyEigenVals
proc factor data=MyData method=principal out=MyData;
    var X1 X2 X3 X4 X5 X6;
run;
ods output close;

** Transpose the eigenvalues;
proc transpose data=MyEigenVals out=MyEigenVals(drop=_NAME_) prefix=eigenval;
    id Number;
    var Eigenvalue;
run;

** Merge the data and fill down the eigenvalues;
data MyData;
    merge MyData MyEigenVals;
    retain E1 E2 E3 E4 E5 E6;
    if _n_=1 then do;
        E1 = eigenval1;
        E2 = eigenval2;
        E3 = eigenval3;
        E4 = eigenval4;
        E5 = eigenval5;
        E6 = eigenval6;
    end;
    ** weight each factor by its eigenvalue;
    factor1 = factor1 * E1;
    factor2 = factor2 * E2;
    factor3 = factor3 * E3;
    factor4 = factor4 * E4;
    factor5 = factor5 * E5;
    factor6 = factor6 * E6;
run;

ご覧のとおり、これは私の仕事を達成するための直接的な方法ではないようです。ここで誰かがこれをうまく修正するのを手伝ってくれますか? それは可能ですか?

4

1 に答える 1

1

より効率的に組み合わせることができます。少なくとも、最後のデータステップを単純化できます。

data mydata;
if _n_=1 then set MyEigenVals;
set mydata;
array factor[6];
array Eigenval[6];
do _i = 1 to dim(factor);
  factor[_i] = factor[_i]*eigenval[_i];
end;
run;

SET変数を自動的に保持します。

次に、結果の使用方法によっては、乗算をスキップできる場合があります。weight後でデータを分析するために使用している手順によっては、ステートメントを使用して固有値を重みとして使用できる場合があります。それがあなたを大いに買うかどうかはわかりませんが、元の値を変更する必要がなくなる可能性があります。

于 2014-04-09T18:25:19.557 に答える