SAS_如何调用数组中的累积concat

问题描述 投票:0回答:1

我需要执行以下操作,但我不确定如何实现这一点。

我有一个包含需要执行回归的变量的表,该表看起来像

Colummn name | Y | X1 | X2 | X3 | ....| X10 |

Row 1 __________ | - | ---  | ---  | ---  | ....| ---   |

Row 2 __________       | - | ---  | ---  | ---  | ....| ---   |

我想运行10次回归并比较每个模型调整后的R Squared,回归代码为:

proc reg data = table outest = out_table;
model modelN /adjrsq;
run;quit;

在10个模型中,Y变量保持不变,X变量每次增加1:

模型1:Y = X1;

模型2:Y = X1 +X2

模型3:Y = X1+ X2 +X3

......

模型10:Y = X1+X2+X3+....+X10

我想写一个

DO i = 1 to 10
为了简单和方便而执行任务。最终输出可能是来自 PROC REG 代码的 10 个 out_table。但是,我不知道如何在循环中引用因变量。有人可以帮忙解决这个问题吗?谢谢!

sas regression logistic-regression
1个回答
0
投票

如果您的 x 变量名为 x1、x2、x3 等,您可以使用

-
快捷键按顺序选择它们。

%macro model(n);
    %do i = 1 %to &n;
        model&i: model y=x1-x&i /adjrsq;
    %end;
%mend;

proc reg data=have outest=out_table;
    %model(10);
run;

如果变量没有按顺序排列,您将需要做一些额外的事情。在本例中,我们将从管道分隔列表中读取所有输入变量,并将它们一一添加。

/* Create a pipe-separated list of all input variables */
proc sql noprint;
    select name
    into :varlist separated by '|'
    from dictionary.columns
    where    memname = 'HAVE' 
         AND libname = 'WORK'
         AND name NE 'Y'
    order by varnum
    ;
quit;

%macro model(n);
    %do i = 1 %to &n;
        model&i: model y=%scan(&varlist, 1, |)--%scan(&varlist, &i, |) /adjrsq;
    %end;
%mend;

proc reg data=have outest=out_table;
    %model(10);
run;
© www.soinside.com 2019 - 2024. All rights reserved.