查看原文
其他

sencode命令介绍

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

本文作者:李钊颖

文字编辑:张馨月

技术总编:张计宝

写在前面:



在上周一的推文《全国31省GDP排行强势登场!》中,我们用到了sencode命令,当时限于篇幅并没有展开细讲,今天小编带大家详细了解下sencode命令的用法吧!


sencode的语法及常用选项


sencode,是super encode的缩写,是encode命令的升级版,这个命令可以按顺序或其他指定变量的顺序将字符串转码为数值型变量。它可以创建一个输出数值变量,这个变量带有输入的字符串变量varname标签,输出的数值变量可以替换输入的字符串变量,也可以重新生成一个新变量newvar。encode命令是按照字符串观测值的字母数字顺序对其进行排序,与encode命令不同,sencode命令可以按逻辑顺序对与字符串观测值相对应的数值进行排序。下面我们看下sencode命令的语法和常用选项:

 

首先,sencode是个外部命令,需要通过“ssc install sencode”进行安装。安装之后“help sencode”可以查询其基本语法:

sencodevarname [if] [in] , [ generate(newvar) | replace ] [                    label([name] [, [replace]]) noextend                    gsort(gsort_list [, mfirst])                    manyto1 fast ]


在使用sencode命令时,必须指定generate()或replace选项,当然不能同时指定两个选项。下面我们详细解释每个选项的意思:

generate(newvar)若转码时指定该选项,则会创建新的输出数值型变量newvar

replace若转码时指定该选项,则指定的字符型变量将被替换为数值型变量,仅替代,不生成新变量,其在数据集中的位置、变量标签等信息都不发生改变。

label([name][,[replace]]):label()选项指定要创建的的值标签的名称,如果命名的值标签已经存在,则根据我们的需要选择使用或者添加新的。如果未指定label()选项或未指定值标签的名称,则sencode命令使用与generate()或replace选项指定的新变量相同的标签名称。如果指定了label()选项的replace子选项,则在添加新值之前,将删除具有指定值标签名称的所有现有值标签,且其添加值的范围是1到n的不同新标签数。

noextend:在指定该选项的情况下,如果label()选项指定的值标签中没有varname包含的值,则不会对varname进行编码。默认情况下,label()选项值标签中不存在的任何值都将添加到该标签中。只有当label()选项指定了现有标签时,才可以指定noextend选项,并且不能与manyto1选项或label()选项的replace子选项一起指定。

gsort(gsort_list[, mfirst]):这个选项为字符串变量的非缺失值指定了通用的排序顺序。如果没有指定gsort()选项,则将其设置为数据集中观察得到顺序,观察值按指定varname的升序或降序分组。gsort()选项中可以是数字或字符串,其中gsort_list是数据集中一个变量或多个变量的列表。如果在varname前键入“+”或不输入任何内容,则观察结果按varname的升序分组;如果在varname前键入“--”,则按varname的降序分组。mfirst子选项指定缺失值将按降序排列。需要我们注意的一点是,即使我们指定了gsort()选项,数据集仍将按其原始顺序进行排序。

 manyto1:与字符型变量相对应的数值之间的映射可以是一对一的,则字符型变量的每个观测值都可以有一个数字代码;也可以是多对一的,那么每个字符串值可以有多个数字代码,对应于数据集中多次出现的字符串观测值。该选项指定从数字代码到输入字符串变量varname可能值的映射可以是多对一,以便每个字符型变量的观测值可以具有多个数字代码,对应于该观测值在数据集中的多个位置。

sencode的用法示例


介绍完常用选项之后,我们利用auto.dta数据集举一些简单例子帮助大家理解。

 示例1


clear allsysuse autosort foreign make

根据foreign值将观察结果按升序排列,并在每个foreign类别中,根据权重值将观察结果按升序排列,即在按照foreign升序排列的基础上,将make变量也按升序排列。

sencode make, replace

使用sencode命令将make变量转换为数值型变量,这里选择replace选项,仅替代,不生成新变量,但观察数据可以发现,make变量下的观测值变为默认顺序数值:


 示例2


先读入auto数据集:

clear allsysuse autodecode foreign, gene(orig)

decode命令是将数值型变量转换为字符型变量,这里生成一个新变量orig,新变量是字符型变量,foreign变量是数值型变量。

sencode orig, gene(origseq) manyto1

这里sencode命令将字符型变量orig转码为数值型变量,这里选择了生成新变量origseq来存储转码结果。

lab list origseq

列出值标签的名称和内容:

tab origseqlist foreign origseq in 1/5, nolab

这里列示出foreign变量和origseq变量,显示数字编码而不是标签值:

若是不加nolab选项,显示的是其标签值:


 示例3


还是先读入auto数据集:

clear allsysuse autosencode make, gene(makeseq) gsort(-foreign)

这里使用sencode命令对make变量进行编码,生成新变量makeseq来存储转码后的数值型变量,使所有非美国汽车(Foreign)数值比所以美国汽车(Domestic)代码低,并且按照foreign变量进行降序排序,但可以看到,数据集还是按照之前的顺序排列:

lab list makeseq

同样列出值标签的名称和内容:

tab makeseq, m // missing选项将缺失值按正常值进行操作list make makeseq in 1/5, nolab  // 列示出其数字编码

以上就是今天介绍的sencode命令,经过介绍,相信大家对这个命令也有了一定的认识。除了上面介绍的,这个命令在绘图时有很大用处,当我们在画图时想将数据集中的字符串变量作为轴标签,但又想将该字符串变量作为X或Y轴变量时,当然需要先转化为数值变量,这个时候使用sencode命令非常方便。虽然这个命令比较小众,但用对了地方,可是能帮我们大忙的,大家快来操作一下吧~







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

“抽丝剥茧”,层层下分——机器学习基本算法之决策树

爬取东方财富网当日股票交易情况

stata调用python爬取时间数据——借他山之石以攻玉

全国31省GDP排行强势登场!
接力《发哨子的人》Stata版
批量实现WORD转PDF

Stata有问必答环节

我听到了企业的哀鸣
“物以类聚”、“近朱者赤”——机器学习初探之KNN
SFI:Stata与Python的数据交互手册(二)

从流调数据中寻找感染真相

熟悉又陌生的reshape

NBA球员薪资分析——基于随机森林算法(二)

NBA球员薪资分析——基于随机森林算法(一)

高亮输出之唐诗作者

湖北省各市疫情数据爬取

古代诗人总去的这些地方你一定要知道!

关于我们



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

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

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

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