[英]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.