如何将字符串变量转换为数值变量?

问题描述 投票:0回答:1

我有来自一项调查的数据,其中的变量包含我想要转换为数值进行分析的字符串。它们还包含一些空白。我使用 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"
)。有没有办法将缺失的内容保留为
.
并转换较长的字符串?

string replace stata encode
1个回答
0
投票
当不存在时,

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 |
     +--------------------------------------------------+
© www.soinside.com 2019 - 2024. All rights reserved.