labelsof和labelbook介绍
本文作者:宁刘莹
文字编辑:王碧琪
技术总编:李朋冲
在之前的推文《数据含义记不住?——label“大神”来帮忙》中我们介绍了labe命令的一系列用法,比如label data、label variable、label define等,那么在生成值标签之后该如何来查看标签的详细信息或者对标签进行修改呢?在此我们介绍两个很实用的命令:labelsof和labelbook。
本文将先介绍两个命令及其选项的主要功能,再以auto数据集为例集中进行举例示范。
我们知道levelsof后面跟变量是将该变量下所有不同值都打印在Stata结果窗口上,与此类似,labelsof就是将该变量的值标签列示出来,如果该变量没有赋值标签,labelsof将不会返回任何内容。它的语法如下:
labelsof varname [ , label ]
labelsof命令只有一个选项:label,当加上这个选项时,表示labelsof后面跟的是值标签的名字而不是变量,将会返回此值标签定义集中包含的值和标签。
二、labelbook命令
labelbook命令后面加值标签名称,显示指定值标签的详细信息,类似于codebook显示变量信息。如果不指定标签,则默认显示当前数据中所有的标签。它的语法为:
labelbook [lblname-list] [, labelbook_options]
labelbook后可以跟以下五个选项:
alpha:按照字母的顺序排列标签。
length(#):检查标签的长度是否都是#,括号内不填则默认为12。
list(#):随机地列示出最多#个变量,默认最多列示出32000个。
problems:描述潜在的问题,如果没有潜在问题,则会返回“no potential problems in dataset xxx.dta”。
detail:显示出变量或值标签的详细报告。
关于problems,只要包含以下至少一种问题,就会在结果窗口的报告中显示出来:
1.值标签赋值时有空缺(例如,0和2都对应了不同的内容,而1则被跳过了)
2.值标签字符串开头或结尾有空白字符
3.值标签包含重复的标签,也就是说,几个不同的赋值对应同一字符串,即并非一一映射
4.值标签有数字对数字的赋值
5.值标签中,数字对应了一个空字符串
6.变量不使用值标签
三、实例演示
接下来以auto数据为例,演示两个命令及其选项在实际操作中起到的不同作用。首先读入数据并且查看数据的描述。
sysuse auto, clear
describe
如图所示,每一个变量后面都有变量标签,用来描述变量的含义。我们注意到其中rep78的含义是维修记录,也就是一辆车维修过的次数。我们想知道这个变量下都有哪些取值,可以使用levelsof:
levelsof rep78
得到结果如下:
为了区分开维修次数不同的汽车,我们可以定义一组值标签,然后用labelbook返回出来:
label define repair 1 "very poor" 2 "poor " 4 "good" 5 "very good"
labelbook
可以发现,这个数据集中除了我们刚才定义的repair之外还有一组值标签origin,是数据集原生的值标签。
同时也可以用labelsof来得到值和值标签,以repair为例:
labelsof repair, label
接下来我们分别检查一下这两组值标签是否存在潜在问题:
labelbook origin, problems
结果告诉我们,在origin中不存在潜在问题。
labelbook repair, problems
结果显示存在三个潜在问题:
第一个:在值标签中有间隔。因为我们在定义值标签时只定义了1、2、4、5四个数字而把3跳过了,因此Stata就将这个潜在问题报告出来了。
第二个:值标签的字符串中,开头或结尾位置有空格。这是因为,我们对2进行标记时,用的是"poor ",poor后面是有一个空格的。
第三个:值标签还没有添加到变量上。
接下来我们把repair这组值标签赋给rep78变量:
label values rep78 repair
为了修正之前Stata指出的值标签的前两个潜在问题,我们将给“3”添加一个值标签,并对2的标签进行修正,并再次查看是否仍然存在潜在问题:
label define repair 2 "poor", modify
label define repair 3 "average", add
labelbook repair, problems
结果显示已经没有潜在问题了。
接下来我们观察一下rep78的频率表:
tab rep78
若想在值标签前面加上相应的值,需要用到下面的命令:
numlabel, add
tab rep78 //再次使用tabulate命令来观察rep78的频率表
可以看到每个值标签前面都加上了对应的值。
相应地,如果想要去掉值标签的前缀,命令如下:
numlabel repair, remove
值标签在实际应用特别是合作中是非常实用的,能够帮助合作者快速理解各个值代表的含义,使工作效率大大提升,在不同的数据集中其应用也会更加灵活。只有亲自动手去做,才能够真正理解掌握哦!
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。