数值型字符型转换,destring tostring
如何将stata中的字符型数据转为数值型
你可以这样处理,先保持这个变量为字符型的变量,然后有substr的命令,提取前四位,只要年份,然后再转化为数值型,就可以计算了。具体来说说着这样的 gen year=substr(accouperi,1,4) 生成一个新变量,这个新变量叫year destring year, replace 这个命令就是把字符型转化为数值型的命名。
数据类型转换之字符型-数值型
Stata中有两种数据类型:字符型和数值型。在我们处理数据的时候,经常会遇到原始数据的数据类型不是我们所需要的数据类型,这就需要我们将原始数据中的一些数据类型进行转换,从而将其转成我们期望的数据类型。Stata也提供了一些相关命令。其中,字符型变量转换为数值型变量的命令有:real()函数,encode和destring命令;数值型变量转换为字符型变量的命令有:strofreal()函数,decode和tostring命令,它们相互对应,那到底有哪些区别与联系呢?
今天我们先来讲一讲如何把字符型变量转化为数值型变量。
一、 命令介绍
encode命令:只可以将以字符型格式储存的非数值变量转换为数值型变量,它的返回值只是1,2,3……的序号变量,相同属性的观测值赋值相同,相当于给字符变量重新编码,并且将原来的字符型数据设置为转换后的数值型变量的标签。常用选项介绍如下:
destring命令:将以字符型格式储存的数值变量转化为数值型变量。常用选项介绍如下:
real(s)函数:同destring命令一样,可以将以字符型格式储存的数值s转化为数值型变量。若s是以字符型格式储存的非数值变量返回缺失值;另外,real()函数还可以对某一个具体观测值实现转变。
二、例子说明
为了方便介绍选项,我们输入如下数据,代码如下:
clear
input ///
str3 num str2 name str10 per str6 income
-1 a “10%” “9747”
1 b “62%” “1,234”
1 a “53%” “938.9”
-1 c “48,6%” “8344”
2 d “58%” “2398”
-2 e “46%” “-”
-3 c “78%” “53822”
3 d “92,2%” “na”
-1 e “65%” “$28477”
1 b “3,6%” “n/a”
end
- 字符型格式储存的数值变量num的转换
代码如下:
encode num, gen(num1)
destring num, gen(num2)
gen num3=real(num)
br num num1 num2 num3 in 1/5
可以看到,对于字符型格式储存的数值变量的3种转换形式,输出结果基本没有区别,但是,num1与num2、num3的显示颜色不一样,需要注意的是,encode命令只是对字符变量重新编码,输出结果不应该和其他两种转换方式所得结果是一样的,这是怎么回事呢?我们删除变量的标签值,来看看输出结果会发生什么变化:
label drop _all
br num num1 num2 num3
可以看到,num1只是对变量num进行数值排序。说明encode命令并非真正意义上的将字符型变量转换为数值型变量,它只是返回了变量的标签。
- 字符型格式储存的非数值变量name的转换
具体代码如下:
encode name, gen(name1) label(xing)
destring name, gen(name2)
gen name3=real(name)
list name name1 name2 name3
stata提示name2没有被找到。那是因为name中有非数字特征,destring命令无法转换,说明该命令只能对字符型格式储存的数值变量起作用,如果必须转换就加force选项,但返回值和real()返回的一样,是缺失的。
.destring name, gen(name2) force
br name name1 name2 name3 in 1/4
- 字符型格式储存的混合变量income的转变
为了转换的方便,需要先用tab命令进行查看各个变量不同的非数字特征,代码如下:
tab income if regexm(income, “[^0-9.]”)
然后用destring命令进行转换,代码如下:
destring income, ignore(“$” “-” “,” “na” “n/a”) gen(income1)
br income income1
前面我们用正则表达式查看了非法数字的类型,当然在这里也我们可以不用ignore选项而选择用正则表达式将上述非法数字进行替换,然后进行转变,具体命令如下:
gen income2=ustrregexra(income,”[^d.]”,””)
destring income2, gen(income3)
br income income2 income3
可以看到相同结果:
最后,以变量per的转换为例,我们介绍一下命令destring的选项percent和dpcomma的用法,代码如下:
destring per, gen(per1) percent dpcomma
br per per1