繁体   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