来自宏变量的多个 proc reg
Multiple proc reg from a macro variable
我正在尝试缩短我的程序。我想从自变量列表和单个因变量中逐一进行多元回归。
这是我的变量列表:
%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
上执行循环。考虑 &indepT1
:
的属性
- 是一串字
- 是space-delimited
- 到某个点结束
让我们把&indepT1
想象成一个句子。这是一个无意义的句子,但每个句子都有一定数量的单词才能结束。我们总是可以计算一个句子中有多少个单词,直到我们到达某种结束标记,并且我们可以通过计数直到我们到达结束指示符来准确知道每个单词的位置。考虑以下示例:
1 2 3 4 5 6 7 8 9 v End
The quick brown fox jumps over the lazy dog.
这句话正好有9个字。我们知道句子的结尾在哪里,因为句号标志着英语中大多数句子的结尾。每个单词都与一个数字相关联,并代表该特定句子的唯一索引。例如,如果我 select 从上面的句子中编辑单词 4,我会得到单词 fox
。
一个句子中总是至少有一个单词,SAS 使用隐藏的内部 end-of-sentence 指示器知道 &indepT1
在哪里结束。我们可以计算从第一个词开始到 end-of-sentence 指示符结束的句子中有多少个词。让我们利用这两个概念来 select 来自 &indepT1
:
的每个单词 one-by-one
%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);
我正在尝试缩短我的程序。我想从自变量列表和单个因变量中逐一进行多元回归。
这是我的变量列表:
%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
上执行循环。考虑 &indepT1
:
- 是一串字
- 是space-delimited
- 到某个点结束
让我们把&indepT1
想象成一个句子。这是一个无意义的句子,但每个句子都有一定数量的单词才能结束。我们总是可以计算一个句子中有多少个单词,直到我们到达某种结束标记,并且我们可以通过计数直到我们到达结束指示符来准确知道每个单词的位置。考虑以下示例:
1 2 3 4 5 6 7 8 9 v End
The quick brown fox jumps over the lazy dog.
这句话正好有9个字。我们知道句子的结尾在哪里,因为句号标志着英语中大多数句子的结尾。每个单词都与一个数字相关联,并代表该特定句子的唯一索引。例如,如果我 select 从上面的句子中编辑单词 4,我会得到单词 fox
。
一个句子中总是至少有一个单词,SAS 使用隐藏的内部 end-of-sentence 指示器知道 &indepT1
在哪里结束。我们可以计算从第一个词开始到 end-of-sentence 指示符结束的句子中有多少个词。让我们利用这两个概念来 select 来自 &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);