如何解决重新编码一个字符串变量
input VAR1 VAR2
A1 1
A2 0
A3 1
A4 1
A5 1
A6 1
A7 1
A8 1
A9 1
A10 1
A15 1
B7 0
A1 0
A16 1
A17 1
A18 1
A19 1
A20 0
A21 1
end
假设您拥有显示的数据。我有VAR1
,并希望从中创建VAR2
,如果VAR1
开头包含A1,A3-A10,A15-A19,A21,则取值为1,否则为零。我相信您可以使用strpos(VAR1)
,但是可以说例如:strpos(VAR1,"A1,A3/A10,A15/A19,A21")
吗?
解决方法
如果您有少量感兴趣的字符串,则可以使用以下方法。如果要搜索大量字符串,而无法写出字符串范围(例如A3-A10),则可能需要另一种方法。
clear
input str3 VAR1 VAR2
A1 1
A2 0
A3 1
A4 1
A5 1
A6 1
A7 1
A8 1
A9 1
A10 1
A15 1
B7 0
A1 1
A16 1
A17 1
A18 1
A19 1
A20 0
A21 1
end
gen wanted = 0
local mystrings = "A1 A3 A4 A5 A6 A7 A8 A9 A10 A15 A16 A17 A18 A19 A21"
foreach string in `mystrings' {
replace wanted = 1 if strpos(VAR1,"`string'") == 1
}
assert wanted == VAR2
请注意,在您的示例输入中,第二次出现的A1的值为0,但根据您的帖子,其值为1。
对于较大范围的字符串,这是更通用的解决方案:
gen A = 0
replace A = 1 if strpos(VAR1,"A") == 1
gen newvar = substr(VAR1,2,.)
destring newvar,replace
gen wanted = 0
replace wanted = 1 if A == 1 & (inlist(newvar,1,21) | inrange(newvar,3,10) | inrange(newvar,15,19))
assert wanted == VAR2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。