循环变量以创建交互术语

时间:2016-02-05 14:44:42

标签: sas

我寻求循环变量(可以包含在宏变量或数据集中)来创建一个宏变量,其中包含可以在回归中使用的交互项。这是一个例子。

假设原始变量位于宏变量中。

%let predictors = age sex bmi;

我试图遍历这些变量并创建一个我可以在回归中使用的宏变量。

在第一次迭代中,我们有年龄。我寻求创造:

% interactions = age sex bmi sex*age bmi*age

适合回归。

然后在下一次迭代中使用sex。

% interactions = age sex bmi age*sex bmi*sex;

等等。谢谢!

2 个答案:

答案 0 :(得分:1)

许多SAS PROC的模型语句支持其语法。管道是所有交叉点,而@ 2将交互限制为2路。离开@为所有人。

proc glm data=sashelp.class;
   class sex;
   model age=sex|height|weight@2;
   run;
   quit;

enter image description here

答案 1 :(得分:0)

请注意确实如何使用此功能,但简单的%do循环应该可以处理您的请求。

%macro test(predictors);
%local n i j ;
%let n=%sysfunc(countw(&predictors));
%do i=1 %to &n;
  %let interactions=&predictors;
  %do j=1 %to &n;
    %if &i^=&j %then %let interactions=
       &interactions %scan(&predictors,&i)*%scan(&predictors,&j)
    ;
  %end;
  %put &=i &=interactions;
%end;
%mend ;
%test(age sex bmi);

将此列表生成到日志中。

I=1 INTERACTIONS=age sex bmi age*sex age*bmi
I=2 INTERACTIONS=age sex bmi sex*age sex*bmi
I=3 INTERACTIONS=age sex bmi bmi*age bmi*sex