Loops 使用*在Stata循环中指定变量无效
为什么该代码在Stata中不起作用?它给我的错误是:Loops 使用*在Stata循环中指定变量无效,loops,stata,Loops,Stata,为什么该代码在Stata中不起作用?它给我的错误是: *无效名称 然而,当我使用 sexd1 sexd2 而不是 sexd* 它很好用sexd*作为本地命令运行良好 代码如下: local list_of_variables weight midpoint_hhinc tabulate sex, gen(sexd) local sexd sexd* foreach i in `list_of_variables'{ foreach j in `sexd'{
*无效名称
然而,当我使用
sexd1 sexd2
而不是
sexd*
它很好用<当我在Stata的命令框中键入命令时,code>sexd*作为本地命令运行良好
代码如下:
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'
}
}
foreach和foreach之间有一个重要的区别<代码>在和foreach中<代码>的<代码>foreach<中的code>in指示Stata按字面意思获取列表中的元素,因此没有解释 所以斯塔塔解释
foreach j in `sexd' {
generate `i'_`j' = `i' * `j'
}
作为
(步骤1)
(步骤2)
它还将替换本地宏i
的当前值,但代码失败,因为*
不能是变量名的一部分
相反,虽然您在使用foreach
时<代码>在中是完全合法的,可以压缩。我会把你的代码重写为
tabulate sex, gen(sexd)
foreach i in weight midpoint_hhinc {
foreach j of var sexd* {
generate `i'_`j' = `i' * `j'
}
}
这在一定程度上是风格问题。您只有一个语法错误,但请注意,当您可以直接引用本地宏中的名称时,将这些名称放入本地宏中并没有任何好处
总而言之,这看起来像是生成交互变量的代码,而大多数Stata建模命令允许您动态引用交互
关于
foreach
at*有一个相当详细的教程,它被解析为一个穷人的逐项列表
generate `i'_sexd* = `i' * sexd*
tabulate sex, gen(sexd)
foreach i in weight midpoint_hhinc {
foreach j of var sexd* {
generate `i'_`j' = `i' * `j'
}
}