相关文章推荐
讲道义的鸡蛋  ·  C# ...·  1 年前    · 
坏坏的羽毛球  ·  mysql - tinyint or ...·  1 年前    · 
火星上的回锅肉  ·  SVG 阴影 | 菜鸟教程·  1 年前    · 

2017.04.10

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"

  • 字符型格式储存的数值变量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

    今天我们分享的是如何把字符型变量转化为数值型变量。想知道 如何把数值型变量转化为字符型变量 吗?关注我们,且听明天分解。

    以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。

    应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

    文字编辑:徐苾雯

    技术总编:刘贝贝

    往期推文推荐:

    微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

    此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

    投稿邮箱: statatraining@163.com

    投稿要求:

    1)必须原创,禁止抄袭;

    2)必须准确,详细,有例子,有截图;

    注意事项:

    1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。

    2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。

    3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

    欢迎关注爬虫俱乐部 返回搜狐,查看更多

    责任编辑:

    声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。