【问题标题】:SAS: How to run a loop on a set of input variables for a functionSAS:如何在函数的一组输入变量上运行循环
【发布时间】:2015-08-20 14:18:05
【问题描述】:

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

所以当我测试了 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;

【问题讨论】:

    标签: variables automation sas


    【解决方案1】:

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

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

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

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

    只需确保在运行 datastep 之前定义了您的宏。

    【讨论】:

    • 嗨罗伯特,谢谢你向我解释这个!真的很感激:)
    • @rayven1lk 没问题。如果你让它工作并且它回答了你的问题,请不要忘记将答案标记为已接受。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多