我正在尝试将2012年的income
值分配给当地人。因此,当地val_AK
在州“AK”中的值为income
时,val_AL
在州“AL”中的值为income
....这是{ {3}}
以下代码生成AK not found r(111);
但AK
中确实存在state_nsw
,这是一个字符串变量:
foreach i in "AK" "AL" "AR" "AZ" {
if (state_nsw=="`i'" & year==2012) { local val_`i'=income}
}
我也尝试过使用Stata 11 version of .dta而且:
if (state_nsw=="`i'" ...
...
// and got invalid name r(198)
我的错误在哪里?
答案 0 :(得分:4)
由于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}
}
我无法通过查看您的代码来回答这个问题,但请参阅下文。
你的麻烦还没有结束。你的代码非常困惑。
if
语句将参考第一个观察进行解释。这在http://www.stata.com/support/faqs/programming/if-command-versus-if-qualifier/
同样
local val_`i' = income
将始终被解释为
local val_`i' = income[1]
无论if
命令如何。
{ }
已经过时if
放置在同一行,可能无法正常工作。 应该做些什么
foreach i in AK AL AR AZ {
su income if year == 2012 & state_nsw == "`i'", meanonly
local val_`i' = r(mean)
}
虽然你想要这样做是一个难题。
答案 1 :(得分:2)
我仍然无法打开数据。请尝试以下方法:
foreach i in "AK" "AL" "AR" "AZ"{
gen val_`i'=income if state_nsw=="`i'" & year==2012
local val `val' val_`i'
}
Sample data and output:
state val year
AK 13 2010
AL 112 2010
AR 12 2010
AZ 14 2010
val_AK val_AL val_AR val_AZ
13
112
12
14