【问题标题】:Stata foreach regression loop errorStata foreach回归循环错误
【发布时间】:2014-08-26 15:09:41
【问题描述】:

我目前正在创建一个循环,它将针对不同区域运行回归。我试图运行的回归是:

reg x1 x2 x3 if Region==n

其中 n=1,2,3,4,5,6。

通过手动输入单独运行它们很好,但是在尝试运行我编写的以下循环时:

local Region "1 2 3 4 5 6"
foreach i of local 'Region' {
reg x1 x2 x3 if Region== 'i'
}

它报告错误:

 'i' invalid name
r(198);

谁能提出一些建议来纠正这个错误?

【问题讨论】:

  • foreach i of local 'Region' 应该是 foreach i of local Region。此外,您可以在定义本地时省略“”。

标签: loops foreach stata


【解决方案1】:

报告的问题与foreachregress 无关,而是与您使用本地宏有关。

本地宏引用的左右引号不同。否则无法嵌套宏引用,这将是一个严重的问题。这是记录在案的,例如[U] PDF 文档中的 18.3.1。

您的代码还有其他问题。让我们先修复它,使用正确的引号并修复另一个语法错误:

local Region "1 2 3 4 5 6"
foreach i of local Region {
    reg x1 x2 x3 if Region == `i'
}

这里假设您有一个名为Region 的变量,并且您还定义了一个同名的本地宏。如果这是真的并且其他一些假设是真的,那么上面应该工作。请注意在对foreach 的调用中如何引用宏名称。

请注意,这个例子可以简化。在这里定义一个本地宏就像将对象放入一个袋子中,然后立即将它们取出。你不需要这样做。

foreach i in 1 2 3 4 5 6 {
    reg x1 x2 x3 if Region == `i'
}

此外,当列表如此简单时,您可以改用forvalues

forval i = 1/6 {
    reg x1 x2 x3 if Region == `i'
}

除此之外,看看statsby 看看它是否有帮助。

总结:

  1. 语法错误:在引用本地宏时使用不同的引号。

  2. 语法错误:在使用 foreach 循环遍历本地宏的元素时,命名它,不要引用它。

  3. 样式错误:不要使用不需要的本地宏。

  4. 样式错误:使用 forvalues 而不是 foreach 等效时。

【讨论】:

  • 非常感谢,样式和语法错误已得到适当注意。请问,如果我使用'forvalues'指令并且我想对每个国家/地区进行单独的回归,有没有办法告诉Stata我想在所有“i”中循环这个回归而不是指定值“我”的?
  • 这是一个常见问题解答:stata.com/support/faqs/data-management/… 请注意,Stata 中的 search foreach 会指出它。
猜你喜欢
  • 2016-03-02
  • 2017-05-17
  • 2014-01-07
  • 2023-04-02
  • 2019-01-14
  • 2018-01-22
  • 1970-01-01
  • 2013-12-21
  • 2013-12-18
相关资源
最近更新 更多