Sas 来自宏变量的多个proc reg

Sas 来自宏变量的多个proc reg,sas,proc,Sas,Proc,我正在努力缩短我的课程。我想从一个独立变量列表和一个独立变量列表中逐个进行多元回归 这是我的变量列表: %let depT1 = BPT1; %let indepT1 = age POIMEST1 TAIMEST1 TUGT1 TLEV5XT1 MARCH2T1 MARRAPT1 TAMAXT1 TAMINT1; 这就是我现在正在做的: model &depT1= age /stb; model &depT1= POIMEST1 /stb; model &depT1=

我正在努力缩短我的课程。我想从一个独立变量列表和一个独立变量列表中逐个进行多元回归

这是我的变量列表:

%let depT1 = BPT1;
%let indepT1 = age POIMEST1 TAIMEST1 TUGT1 TLEV5XT1 MARCH2T1 MARRAPT1 TAMAXT1 TAMINT1;
这就是我现在正在做的:

model &depT1= age /stb;
model &depT1= POIMEST1 /stb;
model &depT1= TAIMEST1 /stb;
model &depT1= TUGT1 /stb;
model &depT1= TLEV5XT1 /stb;
model &depT1= MARCH2T1 /stb;
model &depT1= MARRAPT1 /stb;
model &depT1= TAMAXT1 /stb;
model &depT1= TAMINT1 /stb;
我试图找到一种类似于proc gplot语法的编写方法,即:

plot &depT1*(&indepT1);

有办法吗?感谢您的帮助:)

您可以在
&indepT1上执行循环。考虑<代码>和iNDET1:

的属性
%macro model(data=, x=, y=);
    %let total_words = %sysfunc(countw(&x) );

    %do i = 1 %to &total_words;
        %let selected_var = %scan(&x, &i);

        proc reg data=&data;
             model &y = &selected_var / stb;
        run;
    %end;
%mend;
  • 这是一串单词
  • 它是以空格分隔的
  • 它在某一点之后结束
让我们把
&indepT1
看作一个句子。这是一个毫无意义的句子,但每个句子在结束前都有一定数量的单词。我们总是可以数一数一个句子中有多少个单词,直到我们到达某个结束标记,并且我们可以通过数一数,直到我们到达结束指示器,来准确地知道每个单词的位置。考虑下面的例子:

1   2     3     4   5     6    7   8    9  v End
The quick brown fox jumps over the lazy dog.
这个句子中正好有9个单词。我们知道句子的结尾在哪里,因为句号标志着英语中大多数句子的结尾。每个单词都与一个数字相关联,并表示该特定句子的唯一索引。例如,如果我从上面的句子中选择单词4,我将得到单词
fox

一个句子中至少有一个单词,SAS使用隐藏的内部句子结尾指示符知道
&indepT1
在哪里结束。我们可以计算句子中有多少个单词,从第一个单词开始,到句末结束。让我们利用这两个概念从
&indepT1
中逐个选择每个单词:

%macro model(data=, x=, y=);
    %let total_words = %sysfunc(countw(&x) );

    %do i = 1 %to &total_words;
        %let selected_var = %scan(&x, &i);

        proc reg data=&data;
             model &y = &selected_var / stb;
        run;
    %end;
%mend;
编译完成后,您可以输入任意数量的变量作为宏的参数,只要它遵循上面讨论的句子规则

%model(data=have 
     , x=age POIMEST1 TAIMEST1 TUGT1 TLEV5XT1 MARCH2T1 MARRAPT1 TAMAXT1 TAMINT1 
     , y=BPT1);

不幸的是,没有一种简单的方法来引用变量,并为每个变量单独运行回归。您可以在本页底部看到如何编写此代码的示例。工作起来很有魅力!非常感谢,先生:)