簡體   English   中英

如何在Stata中將`if`與本地宏一起使用?

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

我無法通過查看您的代碼來回答問題,但請參見下文。

您的麻煩還沒有結束。 您的代碼非常混亂。

將始終被解釋為

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM