需要根据可能出现在5个“响应”变量之一中的条目在Stata中创建一个新的二进制变量。
现有数据示例:
Resp1 Resp2 Resp3 Resp4 Resp5
A57 A510 B899 Z781 Q56883
A110 A4589 B11345 Z570 D444
A510 B899 Z4721 Z33 M406
B890 B678 T4487 A57 T112
A57 T112 B890 M119 Z4001
我想做的是:
generate byte A57_Response = 0
replace A57_Response = 1 if Resp1 == "A57" & substr(Resp1, 3, 1) != "2"
replace A57_Response = 1 if Resp2 == "A57" & substr(Resp2, 3, 1) != "2"
replace A57_Response = 1 if Resp3 == "A57" & substr(Resp3, 3, 1) != "2"
replace A57_Response = 1 if Resp4 == "A57" & substr(Resp4, 3, 1) != "2"
replace A57_Response = 1 if Resp5 == "A57" & substr(Resp5, 3, 1) != "2"
有没有办法一次搜索所有5个Resp变量?
另外,有没有一种方法可以generate
在1
不写出整个响应的情况下为新的二进制变量?例如,分配1
有一个每次Z
代码,即使它Z33
,Z4001
或任何其他可能的代码与开始Z
?由于我正在使用,所以" "
我知道它正在寻找完全匹配的大小写,但是还有其他选择吗?
如果字符串变量等于,"A57"
则其第三个字符不"2"
为多余的条件:其第三个字符始终为"7"
。
现在的代码只是
gen wanted = inlist("A57", Resp1, Resp2, Resp3, Resp4, Resp5)
这些变量之一开始的条件"Z"
是
gen desired = 0
forval j = 1/5 {
replace desired = 1 if substr(Resp`j', 1, 1) == "Z"
}
第二个问题不需要循环,因为它也可以使用编写为计算形式inlist()
。
编辑在您的示例中,Z
永远不会出现第二个或更高版本的字符,因此测试的任何出现Z
都不会带来误报的风险:
* Example generated by -dataex-. To install: ssc install dataex
clear
input str7 Resp1 str5 Resp2 str8 Resp3 str5 Resp4 str6 Resp5
"A57" "A510" "B899" "Z781" "Q56883"
"A110" "A4589" "B11345" "Z570" "D444"
"A510" "B899" "Z4721" "Z33" "M406"
"B890" "B678" "T4487" "A57" "T112"
"A57" "T112" "B890" "M119" "Z4001"
end
egen Resp = concat(Resp?), p(" ")
gen wanted = strpos(Resp, "Z") > 0
list
+--------------------------------------------------------------------------------+
| Resp1 Resp2 Resp3 Resp4 Resp5 Resp wanted |
|--------------------------------------------------------------------------------|
1. | A57 A510 B899 Z781 Q56883 A57 A510 B899 Z781 Q56883 1 |
2. | A110 A4589 B11345 Z570 D444 A110 A4589 B11345 Z570 D444 1 |
3. | A510 B899 Z4721 Z33 M406 A510 B899 Z4721 Z33 M406 1 |
4. | B890 B678 T4487 A57 T112 B890 B678 T4487 A57 T112 0 |
5. | A57 T112 B890 M119 Z4001 A57 T112 B890 M119 Z4001 1 |
+--------------------------------------------------------------------------------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句