我目前正在创建一个循环,它将为不同的区域运行回归.我试图运行的回归是:
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' }
除此之外,请statsby
查看它是否有帮助.
综上所述:
语法错误:在引用本地宏时使用不同的引号.
语法错误:在遍历foreach
本地宏的元素时,为其命名,不要引用它.
样式错误:不要使用您不需要的本地宏.
样式错误:使用forvalues
而不是foreach
等同于它.