【问题标题】:Weight factors by eigenvalues from PROC FACTOR in SAS?SAS中PROC FACTOR的特征值加权因子?
【发布时间】:2014-05-23 02:29:53
【问题描述】:

我正在尝试通过特征值对 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;

如您所见,这似乎不是完成我的任务的一种非常直接的方式。这里的任何人都可以帮我解决这个问题吗?有可能吗?

【问题讨论】:

  • 一个建议:不要重复使用这样的名称。您冒着数据发生错误的风险,并且它不会替换您的数据集,并且您没有注意到。由于这个原因,我从不喜欢看到data <name>; set <name>;proc transpose 使用相同的数据集名称。当您总是使用新名称时,更容易追踪错误 - 即使是 MyData1 或用于转置的 EigenVal_t,有时也更容易解决问题。
  • 谢谢@Joe,显然这不是我真正的代码——我只是想让这个问题尽可能简单。

标签: statistics sas factor-analysis


【解决方案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 语句将特征值用作权重 - 取决于您稍后用于分析数据的程序。我不知道这是否对您有好处,但它可以使您免于修改可能更可取的原始值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多