我试图通过他们的特征值来加权来自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;
正如您所看到的,这似乎不是完成任务的直接方式。这里的任何人都可以帮我解决这个问题吗?它甚至可能吗?
答案 0 :(得分:1)
你绝对可以更有效地结合它;至少,您可以简化最后一个datastep。
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
语句将特征值用作权重 - 具体取决于您以后用于分析数据的过程。我不知道这是否会给你带来很大的好处,但它可以帮助你避免修改原始值,这可能是更好的选择。