全局宏和循环的冲突

时间:2018-09-08 02:16:43

标签: loops stata stata-macros

我正在尝试自动执行一系列顺序命名的文件,以相同的方式处理它们,然后保存它们的过程。

我认为将forvalues循环与全局宏一起使用将是在Stata中做到这一点的最佳方法。

我的代码如下:

global s=1988
forvalues i=${s}/2018 {
import excel "${s}.xlsx", sheet("Data") firstrow clear 
.
.
.
save ${s}, replace
}

但是,这给了我错误:

  

程序错误:代码与大括号位于同一行

似乎Stata正在读取全局宏的花括号作为循环的开始。我尝试了循环的不同变体来解决此问题,但无济于事。由于我在循环中使用clear,因此无法使用局部宏,否则它将陷入无限循环。

1 个答案:

答案 0 :(得分:1)

我以前遇到过这个问题。由于某种原因,Stata对花括号的数量感到困惑。如果删除它们,则forvalues循环将按预期工作:

global s = 1988
forvalues i = $s / 2018 {
    display `i'
}

1988
1989
1990
1991
.
.
.
2016
2017
2018

您还可以将全局宏s嵌套在本地宏中:

local s = ${s}
forvalues i = 1 / `s' {
    display `i'
}