Быв*_*сор 1 if-statement local stata
我正在尝试将income2012 年的值分配给当地人。因此,本地将在状态“AK”中val_AK具有值,在状态“AL”中具有值....这是.dta 的 Stata 11 版本incomeval_ALincome
以下代码生成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}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用这个方法和这个:
if (state_nsw=="`i'" ...
...
// and got invalid name r(198)
Run Code Online (Sandbox Code Playgroud)
我的错误在哪里?
与字符串变量一样,state_nsw它只能与文字字符串或另一个字符串变量进行比较。
简化为循环中的第一个值
foreach i in "AK" {
if (state_nsw == `i' & year == 2012) { local val_`i'=income }
}
Run Code Online (Sandbox Code Playgroud)
内部语句被解释为
if (state_nsw == AK & year == 2012) { local val_AK = income }
Run Code Online (Sandbox Code Playgroud)
现在就Stata而言AK不是文字字符串,因此它只能是字符串变量的名称。但是你没有这样的变量,这就是你得到错误的原因。更合适的是
if (state_nsw == "AK" & year == 2012) { local val_AK = income }
Run Code Online (Sandbox Code Playgroud)
或者,更一般地说,
if (state_nsw == "`i'" & year == 2012) { local val_`i'=income }
Run Code Online (Sandbox Code Playgroud)
那么,为什么你会收到错误invalid name r(198):
foreach i in "AK" "AL" "AR" "AZ" {
if (state_nsw=="`i'" & year==2012) { local val_`i'=income}
}
Run Code Online (Sandbox Code Playgroud)
我无法通过查看您的代码来回答这个问题,但请参阅下文。
你的麻烦还没有结束。你的代码非常混乱。
该if声明将参考第一个观察结果进行解释。对此进行了解释:http://www.stata.com/support/faqs/programming/if-command-versus-if-qualifier/
相似地
local val_`i' = income
Run Code Online (Sandbox Code Playgroud)总是会被解释为
local val_`i' = income[1]
Run Code Online (Sandbox Code Playgroud)
无论命令如何if。
{ }同一行if已经过时,并且可能无法按您的意愿工作。应该起作用的是
foreach i in AK AL AR AZ {
su income if year == 2012 & state_nsw == "`i'", meanonly
local val_`i' = r(mean)
}
Run Code Online (Sandbox Code Playgroud)
尽管你为什么要这么做还是一个谜。