字符串转指示变量,类型不匹配错误

String to indicator variable, type mismatch error

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

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

type mismatch r(109)

我正在使用 2016 年 ANES 集,我实际上是在尝试将状态分组为开放的主要状态和封闭的 primary/caucus 状态。

我尝试了以下代码:

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**

如能提供任何帮助,我们将不胜感激。

使用 census 玩具数据集的前十个观察值:

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 |
     +----------------+

我们来说说为什么题中的代码是错误的。 OP 没有提供示例数据,但如果没有此类数据,错误都是可以识别的,自然假设 state 是数据集中的字符串变量。

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

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

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

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

if

state == "AL"

& "AK"

& "CO"

& "GA"

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

gen oprim = state == "AL" & 42

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

如果重写

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

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

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

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

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

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