Loops Stata foreach回归循环错误

Loops Stata foreach回归循环错误,loops,foreach,stata,Loops,Foreach,Stata,我目前正在创建一个循环,它将运行不同区域的回归。我尝试运行的回归是: 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); 有人能提出一些建议来纠正此错误

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

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或regress无关,而是与您使用本地宏有关

本地宏引用周围的左引号和右引号不同。否则宏引用无法嵌套,这将是一个严重的问题。这是有文档记录的,例如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'
}
这里的假设是您有一个名为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'
}
除此之外,看看斯塔斯比,看看它是否有帮助

总之:

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

语法错误:在本地宏的元素上使用foreach循环时,命名它,不引用它

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

样式错误:当forvalues等效时,使用forvalues而不是foreach


报告的问题与foreach或regress无关,而是与您使用本地宏有关

本地宏引用周围的左引号和右引号不同。否则宏引用无法嵌套,这将是一个严重的问题。这是有文档记录的,例如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'
}
这里的假设是您有一个名为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'
}
除此之外,看看斯塔斯比,看看它是否有帮助

总之:

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

语法错误:在本地宏的元素上使用foreach循环时,命名它,不引用它

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

样式错误:当forvalues等效时,使用forvalues而不是foreach


局部“区域”的foreach i应为局部区域的foreach i。另外,在定义local时可以省略。local“Region”的foreach i应该是local Region的foreach i。另外,您可以在定义local时省略。非常感谢,样式和语法错误都会得到适当的注意。请问,如果我使用“forvalues”指令,并且我想对每个国家进行单独的回归,有没有办法告诉Stata我想在所有I中循环这个回归,而不是指定I的值?这是一个常见问题:请注意,在Stata中搜索foreach会指向它。非常感谢,样式和语法错误被适当地注意到。我可以问一下,如果我使用“forvalues”指令,并且我想对每个国家进行单独的回归,有没有一种方法可以告诉Stata我想在所有I中循环这个回归,而不是指定I的值?这是一个常见问题:请注意,在Stata中搜索foreach会指向它。