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)
有人可以提出一些建议来解决这个错误吗?
报告的问题与使用本地宏无关,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'
}
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查看它是否有帮助.
综上所述:
语法错误:在引用本地宏时使用不同的引号.
语法错误:在遍历foreach本地宏的元素时,为其命名,不要引用它.
样式错误:不要使用您不需要的本地宏.
样式错误:使用forvalues而不是foreach等同于它.