指标变量的字符串,类型不匹配错误

时间:2018-11-23 19:04:06

标签: string stata type-mismatch

我正在尝试将字符串变量(类型#pragma once #include<iostream> #include<string> // never do this in a header file: // using std::ostream; template<typename K, typename V> struct Pairwise{ K first; V second; Pairwise() = default; Pairwise(K, V); //print out as a string in main friend std::ostream& operator<<(std::ostream &out, const Pairwise &n) { return out << n.first << ':' << n.second; } }; int main (){ using std::cout; using std::endl; using std::string; Pairwise<string, string> example = {"key", "value"}; cout << example << endl; } ,格式为str2)转换为Stata中的指示符变量。

但是,我仍然收到以下错误:

  

类型不匹配r(109)

我正在使用2016 ANES集合,并且我实际上是在尝试将状态分为开放的主要和封闭的主要/核心州。

我尝试了以下代码:

%9s

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

我也尝试过gen oprim= (state=="AL" & "AK" & "CO" & "GA" &...) gen oprim=1 if state=="AL" & "AK" & "CO" & "GA" &... 变量,但是我收到以下输出:

destring

任何人都能提供的帮助将不胜感激。

2 个答案:

答案 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"

& "AK"

& "CO"

& "GA"

state == "AL"是判断为0或1的是非条件,但"AK" "CO" "GA"都不是是或否条件;它们都是字符串值,因此命令失败,因为Stata需要在if条件下将数字视为每个元素。

虽然很傻,

gen oprim = state == "AL" & 42

将是合法的,因为42是数字(在对或错评估中,计数为true)。 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") 

对此有限制-还有其他策略-但我将在不解决其他问题的情况下保留此答案。

答案 1 :(得分:1)

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