查看原文
其他

变量类型转换之encode&decode命令

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:赵冰洁,中南财经政法大学金融学院

文字编辑:崔赵雯

技术总编:余术玲

爬虫俱乐部云端课程

  爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营在不久前已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!   
在往期推文《encode和decode--带你探索解码与编码的世界》中已经为大家介绍了在 Python 中有关编码和解码的两种数据处理方法: encode 和 decode,今天小编将和大家一起继续探索在 Stata 中进行变量类型转换的两个命令:encode & decode。让我们一起来看一下吧~

一、命令介绍

1. encode -- 字符型变量转换为数值型变量

命令语法如下:encode varname [if] [in] , generate(newvar) [label(name) noextend]
该命令的常用选项:
(1)generate(newvar)
在使用 encode 命令时,generate(newvar) 选项是必须设定的,赋给转换后的数值型变量新的变量名——newvar。
(2)label(name)
该选项用于指定转换后的数值型变量的值标签名称。如果未指定 label( ) 选项,则转换后的数值型变量的值标签名称与其变量名称相同。
(3)noextend
使用 encode 命令时,在指定 noextend 选项的情况下,如果 label( ) 选项所指定的值标签中没有 varname 包含的值,则不会对 varname 进行编码。在默认情况下,label( ) 选项的值标签中不存在的任何值都将添加到该标签中。只有当 label( ) 选项指定了新生成变量的值标签,才可以指定 noextend 选项。

2. decode -- 数值型变量转换为字符型变量

命令语法如下:decode varname [if] [in] , generate(newvar) [maxlength(#)]
该命令常用选项:
(1)generate(newvar)
在使用 decode 命令时,generate(newvar) 选项是必须设定的,赋给转换后的字符型变量新的变量名——newvar。
(2)maxlength(#)
maxlength( # ) 选项用于设定转换后的字符型变量的长度,#的设定必须是在1-32000字节之间。在默认情况下,字符型变量的长度为32000字节。

二、案例介绍

1. encode 命令示例

接下来,以 Stata 的示例数据集为例,结合 lable( ) 选项介绍一下 encode 命令的具体使用。clear all
webuse hbp2,clear
describe sex /// 查看sex这一变量,观察其在内存中的存储类型
结果如下:

根据以上结果显示,可以看到 sex 这一变量在内存中的存储类型为字符型变量,且该变量没有值标签。接下来,我们就使用 encode 命令将其转换为数值型变量 gender,并通过 label( ) 选项为该变量添加值标签。encode sex, generate(gender) label(sexlbl) /// 生成新的数值型变量gender,并为其添加值标签

des gender /// 查看gender这一变量,观察其转换之后的存储类型和值标签
结果如下:

查看数据窗口,可以看到新生成了一列变量 gender(蓝色字体标识),其观测值与原来的字符型变量 sex 的观测值一致,并且新变量的存储类型已经由原来的字符型变量转换为了数值型变量,同时通过 label( ) 选项添加了新的值标签 sexlbl。转换之后,gender 这一数值型变量就可以被看做是虚拟变量,每一个观测值都会有相应的数字序号表示,我们可以用这一变量进行实证分析。以t检验为例,结果如下:

2. decode 命令示例

clear all
webuse hbp3,clear
describe female /// 查看female这一变量,观察其在内存中的存储类型
结果如下:

可以看到,female 这一变量在内存中的存储类型为数值型变量。接下来,我们通过使用 decode 命令将这一变量转换为字符型变量。decode female, generate(gender_2) /// 通过decode命令进行变量类型的转换,生成新的变量gender_2

des gender_2 /// 查看新变量gender_2,观察其在内存中的存储类型
结果如下:

查看数据窗口,我们可以看到新增了一列变量 gender_2,且新变量的存储类型为字符型。

三、使用误区

在 Stata 中处理数据时,有时候需要将字符型变量转换为数值型变量。encodedestring 都是比较常用的命令,但是二者有区别。encode 命令是给字符型变量重新编码,它只是返回了转换后的数值型变量的标签,而不是将原来的以字符型存储的数值变量转换为真正意义上的数值变量, 而且encode 命令会自动根据文字类别进行编号,并设定相应的[数字-文字对应表]。在上述案例介绍中,通过 encode 命令进行变量类型转换后,我们会得到如下结果:

可以看到,在数据窗口中,新增变量的数据呈现蓝色字体,且有相应的[数字-文字对应表],即 1-female;2-male。所以, encode 命令在进行变量类型转换的同时会根据[数字-文字对应表]对原来字符型变量进行相应的分组,新变量的观测值以原来的字符型变量观测值显示,但是其真实值是1,2,3,......等表示序号的数值。

为了更准确地使用 encode 命令和 destring命令,这里有两点小 tips:
(1)若想真正意义上地将字符型变量转换为数值型变量,则使用 destring 命令。
(2)若想为字符型变量观测值分类,贴上1,2,3......等表示序号的编码值,并且将原来的字符型数据设置为转换后的数值型变量的标签,则使用 encode 命令。以上就是关于 encode 命令和 decode命令的介绍了,更多的精彩内容大家可以通过 help 命令进行了解~



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!往期推文推荐

Seminar | 主动型基金:我还行吗?

Seminar | CEO的哪些特征和能力更重要?

用词云图看Sustainability期刊热门题目

用Python把新婚祝福打满公屏!

震惊!知名数据分析软件竟被某度翻译“亲切称呼”为“斯塔塔”

喜临涛门,月满人圆

Python3.8新秀海象符成功出道“合”我在一起—merge在Sustainability上发文最多的原来是这些高校

Python中的这些运算符你真的会用吗?

字符串函数总动员

用词云图看2020社科基金课题~建议收藏!Python精选推文干货合集
xpose和sxpose,谁是卧底?让你的数据一目了然--label命令介绍Python推文合集基础篇(下)|算法简介【小白指南】Python中有哪些数据类型?(附推文合集)轻松获取通行数据——cntraveltime命令介绍让Stata完美牵手中国地图之cnmapsearch关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存