首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将此字符串变量重新编码为新变量?

如何将此字符串变量重新编码为新变量?
EN

Stack Overflow用户
提问于 2022-11-01 11:38:22
回答 1查看 56关注 0票数 0

我想用>100000个不同的观测值将我的变量Ucod以一个新变量的形式重新编码到3-4个分类值中。

问题是,我不想输入Ucod的所有值来重新编码。例如,我希望使用一个if条件,比如Ucod中的任何值都以I (例如,I234I345I587)开头,将整个值重新编码为CVD

我尝试使用不同的条件使用strpos()函数,但没有成功。

附加我的数据和变量Ucod的图片

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-01 12:28:44

您只需使用gen和一系列replace命令:

代码语言:javascript
运行
复制
gen ucod_category = 0 if ucod >= "I00" & ucod <= "I519"
replace ucod_category = 1 if ucod >= "I60" & ucod <= "I698"

然后将这些类别标记为CVD、Stroke等。这应该按照您的I10代码中缺少小数点的预期方式进行排序。"I519“< "I60")

但是,将ucod转换为一个数字可能更方便( A的第一个数字0,B的1)。这样您就可以在一个命令中使用标签对其进行重新编码:

代码语言:javascript
运行
复制
gen ucod_numeric = (ascii(substr(ucod, 0, 1)) - 65) * 1000 + real(substr(ucod, 1)) / cond(strlen(ucod) == 4, 10, 1)
recode ucod_numeric (800/851.9=0 "CVD") (860/869.8=1 "Stroke"), generate(ucod_category) 

同样,这应该按照预期的顺序排序: I519 (变为851.9) < I60 (860)。

编辑:由于ascii不起作用(可能是Stata版本问题),您可以尝试这样的方法将字母更改为数字。

代码语言:javascript
运行
复制
gen ucod_letter_code = -1
forvalues i = 0/25 {
     replace ucod_letter_code = `i' if substr(ucod, 1) == char(`i' + 65)
}
gen ucod_numeric = ucod_letter_code * 1000 + real(substr(ucod, 1)) / cond(strlen(ucod) == 4, 10, 1)
recode ucod_numeric (800/851.9=0 "CVD") (860/869.8=1 "Stroke"), generate(ucod_category) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74275321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档