我有来自一项调查的数据,其中的变量包含我想要转换为数值进行分析的字符串。它们还包含一些空白。我使用 Stata 15.1 进行分析。这是变量的示例:
input str50 workplace
"1"
"1"
"Consultant"
"1"
"3"
"3"
"1"
"3"
"1"
"2"
"1"
"Resident"
"Physician"
它应该看起来像这样:
input workplace
1
.
1
5
1
3
.
3
1
.
3
1
.
2
1
5
5
不幸的是,我无法在不丢失信息的情况下成功
destring
。
我尝试了以下方法:
gen workplace_cleaned = workplace
replace workplace_cleaned = 5 if real(workplace) == .
但是,这不起作用,因为它返回错误
type mismatch r(109);
。如果我的研究正确,real()
不会识别字符串不是有效数字。
我尝试使用
force
,但这会将丢失的数据与长字符串混合在一起(例如"Consultant"
)。有没有办法将缺失的内容保留为 .
并转换较长的字符串?
destring
无法找到等效的数字。它是 real()
的智能包装,但(例如)real("Consultant")
无法映射到数字。
备份,您将混合字符串和数字输入读取为字符串。它们之间的桥梁由值标签组成。对于您的问题,没有一步解决方案,但以下代码可能具有指导意义。我确定了两条路线:走更多的路线,通过
encode
到达你想要的地方;或者使用更多数字并使用值标签到达您想要的位置。
另请参阅
SJ-18-4 dm0098。 。说 Stata:解决烦人的字符串变量的七个步骤 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 N. J. 考克斯和 C. B. 谢克特 Q4/18 SJ 18(4):981--994(无命令) 提供了解释如何转换字符串的分步指南 变量或——视情况而定——保留它们原样 是
https://www.stata-journal.com/article.html?article=dm0098
clear
input str50 workplace
""
"1"
"Consultant"
"3"
"2"
"Resident"
"Physician"
end
clonevar original=workplace
order original
clonevar copyvar=workplace
* route 1
replace workplace = "One" if workplace == "1"
replace workplace = "Two" if workplace == "2"
replace workplace = "Three" if workplace == "3"
label def work 1 "One" 2 "Two" 3 "Three" 4 "Resident" 5 "Physician" 6 "Consultant"
encode workplace, gen(work) label(work)
* route 2
replace copyvar = "6" if copyvar == "Consultant"
replace copyvar = "5" if copyvar == "Physician"
replace copyvar = "4" if copyvar == "Resident"
destring copyvar, gen(work2)
label val work2 work
list, sep(0)
list, sep(0) nolabel
结果
. list, sep(0)
+-------------------------------------------------------------+
| original workplace copyvar work2 work |
|-------------------------------------------------------------|
1. | . . |
2. | 1 One 1 One One |
3. | Consultant Consultant 6 Consultant Consultant |
4. | 3 Three 3 Three Three |
5. | 2 Two 2 Two Two |
6. | Resident Resident 4 Resident Resident |
7. | Physician Physician 5 Physician Physician |
+-------------------------------------------------------------+
.
. list, sep(0) nolabel
+--------------------------------------------------+
| original workplace copyvar work2 work |
|--------------------------------------------------|
1. | . . |
2. | 1 One 1 1 1 |
3. | Consultant Consultant 6 6 6 |
4. | 3 Three 3 3 3 |
5. | 2 Two 2 2 2 |
6. | Resident Resident 4 4 4 |
7. | Physician Physician 5 5 5 |
+--------------------------------------------------+