【问题标题】:String to indicator variable, type mismatch error指示变量的字符串,类型不匹配错误
【发布时间】:2019-04-26 08:52:11
【问题描述】:

我正在尝试将字符串变量(类型str2,格式%9s)转换为Stata 中的指标变量。

但是,我不断收到以下错误:

类型不匹配 r(109)

我正在使用 2016 ANES 集,我基本上是在尝试将状态分组为开放的初级和封闭的初级/核心状态。

我尝试了以下代码:

gen oprim= (state=="AL" & "AK" & "CO" & "GA" &...)

gen oprim=1 if state=="AL" & "AK" & "CO" & "GA" &...

我之前在转换此变量时遇到过麻烦。例如,我尝试生成新的指标变量,而不用在状态代码周围加上引号。

我也尝试destring 变量,但我收到以下输出:

destring state, generate(statenum) float
state: contains nonnumeric characters; no **generate**

任何人都可以提供任何帮助将不胜感激。

【问题讨论】:

  • 请使用dataex 提供示例数据。阅读here了解更多信息。

标签: string stata type-mismatch


【解决方案1】:

使用census toy 数据集的前十个观察结果:

sysuse census, clear
keep if _n <= 10

以下对我有用:

generate oprim = 0 
replace oprim = 1 if state2 == "AZ" | state2 == "DE"

list state2 oprim, separator(0)

     +----------------+
     | state2   oprim |
     |----------------|
  1. | AL           0 |
  2. | AK           0 |
  3. | AZ           1 |
  4. | AR           0 |
  5. | CA           0 |
  6. | CO           0 |
  7. | CT           0 |
  8. | DE           1 |
  9. | FL           0 |
 10. | GA           0 |
     +----------------+

【讨论】:

    【解决方案2】:

    让我们解释一下为什么问题中的代码是错误的。 OP 没有给出示例数据,但是如果没有这些数据,错误都是可以识别的,当然假设 state 是数据集中的字符串变量。

    首先,我们可以省略...(没有人认为它是合法的)和括号(没有区别)。

    gen oprim = state=="AL" & "AK" & "CO" & "GA"
    
    gen oprim=1 if state=="AL" & "AK" & "CO" & "GA" 
    

    其中任何一个都会失败,因为 Stata 将 if 条件解析为

    if

    state == "AL"

    &amp; "AK"

    &amp; "CO"

    &amp; "GA"

    state == "AL" 是一个判断为 0 或 1 的真或假条件,但 "AK" "CO" "GA" 都不是真或假条件;它们都是字符串值,因此命令失败,因为 Stata 需要将数字视为 if 条件中的每个元素。虽然显然很傻,

    gen oprim = state == "AL" &amp; 42

    是合法的,因为 42 是数字(在真或假评估中算作真)。 Stata 不会填写state ==,这是您希望看到的暗示。

    如果你重写

    gen oprim = state == "AL" & state == "AK" & state == "CO" & state == "GA" 
    

    那么你有一个合法的命令。这根本不是你想要的。 state 不可能在同一观察中等于不同的字符串值,这就是该命令正在测试的内容。您将&amp;(和)与|(或)混淆了。

    gen oprim = state == "AL" | state == "AK" | state == "CO" | state == "GA" 
    

    这样的语句很长,写出来很乏味且容易出错,但 Stata 有替代语法

    gen oprim = inlist(state, "AL", "AK", "CO", "GA") 
    

    这是有限制的——还有其他策略也有——但我将把这个答案留在那里而不解决进一步的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多