如何从字符型改变为数值型——Stata教程(Stata字符型数据转为数值型数据)

Stata是一个十分实用的数据分析软件,常常在社会科学领域中被使用,然而在使用Stata的过程中,我们常常会碰到字符型变量需要转换为数值型变量的情形。本文将通过多个方面,详细阐述Stata如何实现字符型向数值型的转换,供广大Stata用户参考学习。

一、使用destring命令

destring命令是Stata中用于将字符串(string)变量转换为数字(numeric)变量的基本命令。其语法如下:

destring variable name, options

其中,variable name指你要进行转换的变量名,options包括了很多控制转换过程的选项,例如:

  • ignore:忽略不属于数字的字符
  • replace:直接替换原变量
  • force:强制转换

具体使用方法可以通过help destring进行查看。下面我们通过案例来介绍它的使用。

假设我们现有一组数据,countries是字符串变量,代表不同国家的名称,GBR是数值变量,代表该国家的人均GDP。

countries        GBR  
"United States"  58000
"Japan"          39000
"China"          11000
"Germany"        45000

我们现在要将countries变量转换为数值型变量,即根据不同的国家名称分配相应的数值。命令如下:

destring countries, gen(country)
label define country 1 "United States" 2 "Japan" 3 "China" 4 "Germany"
label values country country
drop countries
rename country countries

其中gen选项是新生成的变量名,即我们要将countries转换为country。label相关命令是为新变量设置标签,其目的是方便阅读。

二、使用regexm函数

regexm函数也是Stata中用于将字符串变量转换为数字变量的函数,它的语法如下:

regexm(string, regex) 

其中,string是要转换的字符串,regex则为Stata正则表达式的匹配字符串,表示规则或模式。regexm会在已匹配的子字符串处返回一个数字。举个例子:

input str20 name  
"John"  
"Mary"  
"Chris"  
"Julia"  
end  
generate id = regexm(name, "John|Mary|Chris|Julia")

我们生成了一个字符串变量name,之后生成与之对应的数字变量id。我使用regexm函数将不同的名字分配了不同的id号。假设我们要分别用1-4代表这4个人名字,则我们可以这么写:

input str20 name  
"John"  
"Mary"  
"Chris"  
"Julia"  
end  
generate id = regexm(name, "John") + 2 * regexm(name, "Mary") +      3 * regexm(name, "Chris") + 4 * regexm(name, "Julia") 

其中,用regexm函数生成了4个0-1的值,用于标识表格中每一行的人名是否为特定的人名,之后将这些0-1乘以相应的常数,再把它们相加即可得到我们需要的id号。

三、使用encode命令

encode命令也是Stata中的一条重要命令,它可以将str(string)变量转换为byte或int(integer)变量,其语法如下:

encode variable name, generate(new variable name)

下面我们通过案例来介绍它的使用。

假设我们现有一组数据,gender是字符串变量,代表被试的性别,1代表男性,2代表女性。

gender  
"Male"  
"Female"  
"Male"  
"Female"

我们要将gender转换为数值型变量gender_num,其取值为1和2。命令如下:

encode gender, generate(gender_num) label(gender)

其中,label选项是在新生成的变量上建立标签(即变量说明),为了方便与原变量对应,我把标签设置为变量名称。

四、使用varlabels函数

varlabels函数是Stata用于更改变量标签的命令,其语法如下:

varlabels varlist, options

其中,varlist代表要进行更改的变量名,options中有许多选项,比如:

  • add:在原有的标签后添加文本
  • replace:用文本覆盖原来的标签

下面我们通过具体的案例来演示如何运用该命令。

假设我们现有一组数据,websites为网站名称字符串变量,时长为seconds。

websites              seconds  
"Facebook"            217  
"Twitter"             164  
"Instagram"           166  
"LinkedIn"            320  

我们要将websites进行转换,即针对每个网站名称分配相应的数值。做法是先生成一个新的数值型变量web_num,再将其标签修改为对应的网站名称,具体操作如下:

destring websites, gen(web_num) force
encode web_num, gen(web_num_encoded) label(web_num)
label values web_num_encoded web_num
drop websites
varlabels web_num_encoded, add(varargin)

其中,我们用force选项强制进行转换,encode生成的web_num_encoded变量为web_num的编码,label values用于使新变量能够让所有的代码都能正常运行,drop用来删除原来的字符串变量,以免耽误计算时间和增加命名混乱。最后一句则是修改新变量的标签名。varargin选项用来将文本添加到原始标签和新标签之后。

五、小结

字符型变量与数值变量的转换是Stata中的一项基本操作,在实际应用中也十分常见。本文介绍了Stata中实现字符型变量转换为数值型变量的4种常见方法,包括destring命令、regexm函数、encode命令以及varlabels函数,不同场景对应不同的方法,希望本文对广大Stata用户提供有用的参考。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平