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;
还有其他方法可以做到这一点,但根据您已有的方法,这是最简单的方法。
只需确保在 运行 数据步骤之前定义了宏。
我基本上是在尝试制作一个程序,该程序可以从 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;
还有其他方法可以做到这一点,但根据您已有的方法,这是最简单的方法。
只需确保在 运行 数据步骤之前定义了宏。