来自宏变量的多个proc reg

时间:2016-01-27 15:33:03

标签: sas proc

我正在努力缩短我的计划。我想从一个独立变量和一个因变量列表中逐个进行多次回归。

这是我的变量列表:

deprecated

这就是我现在正在做的事情:

%let depT1 = BPT1;
%let indepT1 = age POIMEST1 TAIMEST1 TUGT1 TLEV5XT1 MARCH2T1 MARRAPT1 TAMAXT1 TAMINT1;

我试图找到一种类似于proc gplot语法的方法来编写它:

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;

有没有办法这样做?感谢您的帮助:))

1 个答案:

答案 0 :(得分:0)

您可以在&indepT1上执行循环。考虑&indepT1

的属性
  • 这是一串文字
  • 它是以空格分隔的
  • 在某一点之后结束

让我们将&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);