Stata foreach回归循环错误

Dav*_*ick 1 foreach loops stata

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

reg x1 x2 x3 if Region==n
Run Code Online (Sandbox Code Playgroud)

其中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'
}
Run Code Online (Sandbox Code Playgroud)

它报告错误:

 'i' invalid name
r(198);
Run Code Online (Sandbox Code Playgroud)

有人可以提出一些建议来解决这个错误吗?

Nic*_*Cox 5

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

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

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

local Region "1 2 3 4 5 6"
foreach i of local Region {
    reg x1 x2 x3 if Region == `i'
}
Run Code Online (Sandbox Code Playgroud)

这里的假设是你有一个被调用的变量Region,你也在定义一个具有相同名称的本地宏.如果这是真的并且其他一些假设是正确的,那么上述应该有效.注意如何在宏名在调用引用foreach.

顺便提一下,这个例子可以简化.在这里定义一个本地宏就像将对象放入一个包中,然后立即将它们取出.你不需要这样做.

foreach i in 1 2 3 4 5 6 {
    reg x1 x2 x3 if Region == `i'
}
Run Code Online (Sandbox Code Playgroud)

此外,当列表很简单时,您可以使用forvalues:

forval i = 1/6 {
    reg x1 x2 x3 if Region == `i'
}
Run Code Online (Sandbox Code Playgroud)

除此之外,请statsby查看它是否有帮助.

综上所述:

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

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

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

  4. 样式错误:使用forvalues而不是foreach等同于它.