1

为什么这段代码在 Stata 中不起作用?它给我的错误是:

* invalid name

但是,当我使用

sexd1 sexd2 

代替

sexd*        

它工作正常。sexd*当我在 Stata 的命令框中键入命令时,可以作为本地人正常工作。

这是代码:

local list_of_variables weight midpoint_hhinc
tabulate sex, gen(sexd)
local sexd sexd*

foreach i in `list_of_variables'{
    foreach j in `sexd'{
        generate `i'_`j' = `i' * `j'
    }
}
4

1 回答 1

3

foreach...inforeach...之间有一个重要的区别offoreach...in指示 Stata 从字面上获取列表的元素,因此没有解释。

所以Stata解释

 foreach j in `sexd' {
     generate `i'_`j' = `i' * `j'
 }

作为

(步骤1)

 foreach j in sexd* {

(第2步)

 generate `i'_sexd* = `i' * sexd*

它还将替换本地宏的当前值i,但代码失败,因为*不能是变量名的一部分。

相反,虽然您对foreach...的使用in是完全合法的,但它可以被压缩。我会将您的代码重写为

 tabulate sex, gen(sexd)
 foreach i in weight midpoint_hhinc {
     foreach j of var sexd* {
         generate `i'_`j' = `i' * `j'
     }
 }

这部分是风格问题。您只有一个语法错误,但请注意,当您可以直接引用这些名称时,将名称放入本地宏中没有任何好处。

总而言之,这看起来像是生成交互变量的代码,而大多数 Stata 建模命令允许您动态引用交互。

foreachhttp://www.stata-journal.com/sjpdf.html?articlenum=pr0005上有一个相当详细的教程

于 2013-02-08T13:18:20.750 回答