作为state_nsw
字符串变量,它只能与文字字符串或另一个字符串变量进行比较。
简化为循环中的第一个值
foreach i in "AK" {
if (state_nsw == `i' & year == 2012) { local val_`i'=income }
}
内部语句被解释为
if (state_nsw == AK & year == 2012) { local val_AK = income }
现在就Stata而言AK
不是文字字符串,所以它只能是字符串变量的名称。但是你没有这样的变量,这就是你得到错误的原因。更合适的应该是
if (state_nsw == "AK" & year == 2012) { local val_AK = income }
或者,更一般地说,
if (state_nsw == "`i'" & year == 2012) { local val_`i'=income }
那么,您为什么会收到错误消息invalid name r(198):
foreach i in "AK" "AL" "AR" "AZ" {
if (state_nsw=="`i'" & year==2012) { local val_`i'=income}
}
我无法通过查看您的代码来回答这个问题,但请参见下文。
你的烦恼还没有结束。你的代码很混乱。
将始终被解释为
local val_`i' = income[1]
不管if
命令如何。
- 自版本 8 以来,放置
{ }
在同一行之后if
已经过时,可能无法按您的意愿工作。
应该工作的是
foreach i in AK AL AR AZ {
su income if year == 2012 & state_nsw == "`i'", meanonly
local val_`i' = r(mean)
}
虽然你为什么要这样做是一个谜。