查看原文
其他

查找变量?用“codebook”!

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

本文作者:钱梦璇

文字编辑:王碧琪

技术总编:李朋冲


在研究中,我们接触最多的是原始数据。这些没有经过整理的数据往往是不统一的,存在缺漏的。例如,对于某个变量的缺失值,原始数据可能会用99以或者一个点来表示。在进行分析时,如果我们使用这些不规范的数据,往往会得到错误的结果。

 

所以,在得到原始数据后,我们往往要做的就是检查数据,然后根据需求进行清洗,再进行各种各样的分析。这项工作虽然基础,但却非常重要。检查数据的重要命令有codebooksummarizedescribe等,其中,codebook命令提供的信息最为全面,小编今天重点介绍这个命令。

 

对于数值型变量,codebook命令可显示其名称、标签、变量的类型、取值范围、异常值、缺失值、均值、标准差、分位数等信息。它的语法结构如下:

 

codebook [varlist] [if] [in] [, options]


 

codebook常用选项有allheadernotesproblems以及compact等,下面会一一介绍。

 

查找变量

 

auto数据为例,如果只描述指定变量的信息,直接在codebook命令后添加变量名即可:

 

sysuse auto, clearlabel values rep78 repairlbl //向变量rep78添加值标签codebook rep78 make price


结果如下所示:


 

RepairRecord 1978指的是变量rep78的标签;typenumeric(int)说明rep78是数值型变量且为整型。当我们给变量rep78添加值标签时,codebook命令也会将其展示出来,但提示这个值标签并未有具体含义。此外,还展示了3个变量的取值范围,是否有缺失值以及均值标准差等信息。

 

如果想要知道此数据集中所有变量的具体信息,可以直接输入codebook或者采用_all,如果数据集变量过多,结果窗口上会有大量的信息,全部显示显然是效率低下的:

 

codebookcodebook _all

 

codebook既可以精确查找,也可以模糊查找。如果数据集中变量太多,我们并不能全部记清,只想查看一下哪些变量名称是比较相似的,也可以用通配符进行查找:

 

gen price_new = price + 500gen rep79 = rep78 - 1codebook price* rep*

 

使用通配符“*”后,凡是带有price或者rep前缀的变量,都被查找了出来。

 

我们知道,stata的每一个命令,运行之后,都会产生一个返回值,我们可以使用di _rc来查看该返回值。如果顺利运行,则返回值为0;如果报错,我们会看到报错信息显示犯了哪一类错误,对应地都有错误代码。比如,我们查看一下auto数据集中是否有rep这个变量:

 

 

从上图可以看到,错误类型为111。在do文件中,如果一行程序报错,则以下程序不再运行,所以在此我们分行运行。如果不想程序因为报错而停止运行,我们可以在前面加capture(简写为cap):

 

 

基于此,我们建议读者在程序中使用返回值做一些判断,这样会减少很多手工查验的麻烦。

 

添加选项

 

对于很多研究过的数据集,当我们时隔多日再次使用它时,经常会忘记它当初的模样。那么codebook命令中的header选项可以帮助我们回忆起“当初与它的点点滴滴”:

 

codebook,header

 

header选项会在所有变量信息的顶部添加关于整个数据集的基本信息,列出数据集名称、上次保存的日期、数据集标签、变量、观测值以及数据集的大小:

 

 

notes选项列示变量的所有注释,举例如下:

 

note rep78:"investigate missing values" //向变量rep78添加注释codebook rep78, notes

 

结果显示了rep78变量的注释,如下所示:

 

 

problems选项描述数据集中已经诊断出来的潜在问题,如标记为未定义值标签的变量、未完全定义标签的变量、包含缺失值的变量以及非整数值日期变量等等。

 

codebook, problems

 

结果如下所示:

 

 

说明此时auto数据集中rep78变量不存在标签;make变量是可以被压缩的以及字符型变量下观测值含有空格。

 

compact选项展示了所有变量的压缩报表,即仅在一个表格中展示变量信息。

 

codebook, compact

 

结果如下所示:

 

 

其实此选项得到的结果与summarizedescribe命令得到的结果有些相似。它与summarize的区别在于,summarize命令主要对变量进行描述性统计,描述了变量的均值、标准差以及最大和最小值;而codebook, compact不仅描述了变量的均值和最大最小值,也展示了变量的标签以及不同观测值的个数,但不汇报变量的标准差。它与describe的区别在于,describe主要描述变量的类型和格式,同时给出了表头信息,但不汇报数值统计信息。如下所示:

 

 

此外,对于多语言数据集,还有一个重要的language选项,以方便不同语言区的使用者了解该数据的具体含义。一个数据集中可能包含一组英语,一组德语,或者一组西班牙语。那么language选项可以指定输出不同语言中的数据标签和变量标签,一个数据集最多可以包含100组标签。当未指定language时,以“active”语言展示。

 

以网络数据集autom为例,指定language为西班牙语es

 

webuse autom, clearcodebook foreign,language(es)

 

发现foreign此时的变量标签为Origen01数据对应的标签分别为Producido en USA Producido fuera de USA

 

 

当选项设置为languages时,会显示出所有语言对应的数据标签和变量标签:

 

codebook foreign,languages

 

结果如下所示:

 

 

当然,codebook命令还有其他一些实用的选项,对于不同的数据集,我们要采用不同的观察方法。好了,今天的介绍就到这里了~

对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
distinct命令用法一览
Stata数据分析技术应用培训
玩转Python之“手把手”教你爬数据(一)
玩转Python之“手把手”教你爬数据(二)
labelsof和labelbook介绍
Statalist上的“火云邪神”
爬虫实战程序的函数封装
Zipfile(二)
利用collapse命令转化原始数据
Stata中的数值型
爬虫实战——聚募网股权众筹信息爬取
duplicates drop之前,我们要做什么?
类型内置函数-type() isinstance()
数据含义记不住?—— label“大神”来帮忙

Zipfile(一)

tabplot命令

Jupyter Notebook不为人知的秘密

字符串方法(三)

关于我们

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

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

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

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