全局宏与循环冲突

Conflict of global macro and loop

我试图通过一堆按顺序命名的文件自动执行 运行 的过程,以相同的方式操作它们,然后保存它们。

我认为使用带有全局宏的 forvalues 循环是在 Stata 中执行此操作的最佳方法。

我的代码是这样的:

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

但是,这给了我错误:

program error: code follows on the same line as open brace

似乎 Stata 正在读取全局宏的花括号作为循环的开始。我尝试了循环的不同变体来解决这个问题,但无济于事。因为我在循环中使用 clear,所以我不能使用本地宏,否则它会进入无限循环。

我以前遇到过这个问题。出于某种原因,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'
}