2015-08-20 29 views
2

我基本上试图制作一个程序,它可以从CSV文件中提取相关变量并对这些时间序列变量执行平稳性测试,而无需键入手动输出变量名称。我是相当新的,也许有裁员,但我基本上内嵌变量名到变量1,变量2,等等SAS:如何在一组函数的输入变量上运行一个循环

所以,当我测试过的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; 

回答

1

你很近......你只需要寻找到call execute。它将允许您构建命令并在datastep完成后执行它们。

在下面的代码中,我们正在构建对我们想要运行的宏的调用。在datastep完成处理后,它们将按照说明执行。这将允许我们使用datastep内的值来构建命令:

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

还有其他的方法来做到这一点,但是这是最简单的基础上你已经到位。

只要确保在运行datastep之前定义了宏。

+0

嗨罗伯特,谢谢你向我解释这个!真的很感激:) – rayven1lk

+0

@ rayven1lk没问题。如果你的工作有效并回答了你的问题,请不要忘记将答案标记为已接受。谢谢。 –

相关问题