sencode命令介绍
本文作者:李钊颖
文字编辑:张馨月
写在前面:
在上周一的推文《全国31省GDP排行强势登场!》中,我们用到了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()选项,数据集仍将按其原始顺序进行排序。
介绍完常用选项之后,我们利用auto.dta数据集举一些简单例子帮助大家理解。
示例1
clear all
sysuse auto
sort foreign make
根据foreign值将观察结果按升序排列,并在每个foreign类别中,根据权重值将观察结果按升序排列,即在按照foreign升序排列的基础上,将make变量也按升序排列。
sencode make, replace
使用sencode命令将make变量转换为数值型变量,这里选择replace选项,仅替代,不生成新变量,但观察数据可以发现,make变量下的观测值变为默认顺序数值:
示例2
先读入auto数据集:
clear all
sysuse auto
decode foreign, gene(orig)
decode命令是将数值型变量转换为字符型变量,这里生成一个新变量orig,新变量是字符型变量,foreign变量是数值型变量。
sencode orig, gene(origseq) manyto1
这里sencode命令将字符型变量orig转码为数值型变量,这里选择了生成新变量origseq来存储转码结果。
lab list origseq
列出值标签的名称和内容:
tab origseq
list foreign origseq in 1/5, nolab
这里列示出foreign变量和origseq变量,显示数字编码而不是标签值:
若是不加nolab选项,显示的是其标签值:
示例3
还是先读入auto数据集:
clear all
sysuse auto
sencode 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命令非常方便。虽然这个命令比较小众,但用对了地方,可是能帮我们大忙的,大家快来操作一下吧~
NBA球员薪资分析——基于随机森林算法(二)
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。