[英]How to use `if` with local macro in Stata?
我正在尝试将2012年的income
价值分配给当地人。 使局部val_AK
将有一些有价值的income
状态“AK”, val_AL
将有一些有价值的income
状态“AL” ......这里是.dta的Stata的11版
以下代码生成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}
}
我也尝试过使用这种方法 :
if (state_nsw=="`i'" ...
...
// and got invalid name r(198)
我的错误在哪里?
由于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
{ }
自版本8起已过时, if
{ }
放在同一行上,可能无法按您希望的那样工作。 应该起作用的是
foreach i in AK AL AR AZ {
su income if year == 2012 & state_nsw == "`i'", meanonly
local val_`i' = r(mean)
}
尽管为什么要这样做是一个难题。
我仍然无法打开数据。 请尝试以下操作:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.