我目前正在创建一个循环,它将针对不同的区域运行回归。我试图运行的回归是:
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);
有人可以建议一些建议来解决这个错误吗?
答案 0 :(得分:5)
报告的问题与foreach
或regress
无关,而是与您使用本地宏有关。
本地宏引用周围的左右引号不同。否则宏引用无法嵌套,这将是一个严重的问题。记录在案,例如, [U] 18.3.1 PDF文档。
您的代码还有其他问题。让我们先修复它,使用正确的引号并修复另一个语法错误:
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
以查看是否有帮助。
总结:
语法错误:在引用本地宏时使用不同的引号。
语法错误:使用foreach
循环遍历本地宏的元素时,请为其命名,不要引用它。
样式错误:不要使用您不需要的本地宏。
样式错误:当它等效时,请使用forvalues
代替foreach
。