我正在尝试将字符串变量(类型#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
任何人都能提供的帮助将不胜感激。
答案 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 |
+----------------+