【问题标题】:Conflict of global macro and loop全局宏和循环冲突
【发布时间】:2018-09-08 02:16:42
【问题描述】:

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

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

我的代码是这样的:

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

但是,这给了我错误:

程序错误:代码跟在大括号的同一行

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

【问题讨论】:

  • 我不知道你在循环中间做了什么不同,但你正在保存到同一个数据集。因此,只有您最后一次导入才会有任何效果。您可能指的是不同的电子表格文件,但 1988 年并非总是如此。

标签: loops stata stata-macros


【解决方案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'
}

【讨论】:

  • 对于像 1988 这样的数字使用全局宏没有明显的充分理由。请使用本地宏或仅使用字面值 1988。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2015-10-23
  • 1970-01-01
相关资源
最近更新 更多