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用户提供有用的参考。