【问题标题】:several regressions on a single dataset in SASSAS中单个数据集的多次回归
【发布时间】:2014-03-25 22:20:21
【问题描述】:

我有以下格式的数据集: M 行 2K 列的表。 我的列是变量对:X_i、Y_i,行是观察值。

我想执行许多线性回归:每对列一个 (Y_i ~ X_i) 并获得结果。

我知道如何使用数组访问特定列,如下所示:

data Xs_Ys_data (drop=i);
array Xs[60] X1-X60;
array Ys[60] Y1-Y60;

我也知道如何拟合单个线性回归模型,如下所示:

proc reg data=some_data;
model y = x;
output out=out_lin_reg;
run;

而且我对循环的概念很熟悉:

do i=1 to 60;
Xs[i] .......;
end;

如何将这三者结合起来得到我需要的东西?

谢谢!

P.S - 我在这里问了一个关于不同格式的类似问题:

SAS reading a file in long format


更新:

我已经设法使用这样的宏创建回归:

 %macro mylogit();
     %do i = 1 %to 60;
      proc reg data=Xs_Ys_data;
          model Y&i = X&i;
      run;
 %end;
 %mend;

 %mylogit()

现在我不确定如何将结果导出到单个表中...

【问题讨论】:

  • 答案是你不知道。以长格式执行回归。另一种选择是将变量提取到宏字符串中,但这更难做到,而且在任何情况下都会占用您的计算机资源。
  • 嗨乔,它似乎与宏一起使用。完成此操作后,是否有一种简单的方法可以将参数估计值保存在单个表中?谢谢!
  • 再一次,通过正确的做法。该宏将运行 60 次回归,这将需要很长时间并创建 60 个表,然后您必须将它们附加在一起。以长格式构造它(你表明你已经有了这个)并使用 BY 语句。

标签: sas linear-regression


【解决方案1】:

你的宏中有这个:

  proc reg data=Xs_Ys_data;
      model Y&i = X&i;
  run;

所以改为创建:

data x_y_Data;
set xs_yx_data;
array xs x1-x60;
array yx y1-y60;
do iter = 1 to dim(xs);
x=xs[iter];
y=ys[iter];
output;
end;
run;

proc reg data=X_Y_data;
    by iter;
    model Y = X;
run;

然后添加一个输出语句,但是您通常会得到结果数据集。现在您获得了 1 个包含所有 60 次迭代的输出表(仍然是 60 个打印输出),如果您想创建一个打印输出,您可以从输出数据集构建它。

【讨论】:

  • 我为这些愚蠢的问题道歉。我对 SAS 真的很陌生,我通过整理我在网上找到的信息来工作......时间在这里并不是真正的问题,所以我不必担心这个。我不确定如何添加一个输出语句,以便我将所有内容都放在一个表中(似乎你暗示这是可能的)。另外,我不确定为什么宏的使用不好(因为它似乎可以工作并计算模型 - 只是不要将它们全部打印到一个地方......)谢谢!!!
  • 宏只是一种过于复杂的方法,当上面做同样的事情时。查看 PROC REG 上的文档,它解释了如何添加输出语句。
猜你喜欢
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
相关资源
最近更新 更多