SAS:如何 运行 对函数的一组输入变量进行循环

SAS: How to run a loop on a set of input variables for a function

我基本上是在尝试制作一个程序,该程序可以从 CSV 文件中提取相关变量并对这些时间序列变量执行平稳性测试,而无需手动输入变量名称。我是相当新的,也许有冗余,但我基本上将变量名称嵌入到 variable1、variable2 等中...

所以当我测试了 ADF 宏并将变量输入为:

  proc arima data=&y;
identify var= &variable1 stationarity =(adf = 3);
run;

它有效,但我正在努力使这个过程自动化,如果你能提供任何帮助,我将不胜感激。谢谢

这是我目前所要做的:

proc import datafile=".....csv"
 out=data
 dbms=csv
 replace;
 getnames=yes;
run;

proc contents data=data out=contents noprint;
run;

data contents;
set contents(keep = name);
if Name = "Quarter" then delete; 
run;

data _NULL_;
set contents;
call symputx(cats('variable',strip(_n_)),name);
run;

data want;
   do i=1 to 4;
   expert=symget(cats('variable',i));


     output;
   end;
  run;

%macro ADF(y = ,x = );

proc arima data=&y;
identify var= &x stationarity =(adf = 3);
run;

%mend ADF;

您非常接近...您只需要调查 call execute。它将允许您构建命令并让它们在数据步骤完成后执行。

在下面的代码中,我们正在构建对我们想要 运行 的宏的调用。在数据步骤完成处理后,它们将作为指令执行。这将允许我们使用数据步中的值来构建命令:

data want;
   do i=1 to 4;
     expert=symget(cats('variable',i));
     call execute (cats('%ADF(y=data,x=',expert,');'));
   end;
 run;

还有其他方法可以做到这一点,但根据您已有的方法,这是最简单的方法。

只需确保在 运行 数据步骤之前定义了宏。