全局宏与循环冲突
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'
}
我试图通过一堆按顺序命名的文件自动执行 运行 的过程,以相同的方式操作它们,然后保存它们。
我认为使用带有全局宏的 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'
}