第1章 数据清洗的基本过程
1.1 预备知识:变量的自然描述与计算机描述
作为现实生活的抽象,变量有其取值。例如性别变量有“男”“女”等取值,收入变量有0元、1000元等等取值。经过抽象,这些取值可以被划分为四类变量:定类变量、定序变量、定距变量、定比变量。在社会变量中,一般后两者可以合并为定量变量。不同层次的变量可以适用于不同的数学计算。
但是在计算机中,变量需要以一串二进制码来存储。在Stata中,数据有两种基本存储类型,即字符型和数值型(如无必要,一般都以数值型存储)。因此,对于现实生活的变量,尤其是类别变量,我们需要对其进行相应的编码。例如“男”的编码为1,“女”的编码为0。在计算机存储中,我们便存储相应的编码,而非字符“男”“女”。
在Stata中,数值型变量有一类取值为缺失值。缺失值在Stata中表为:.a
到.z
,以及.
。若无特殊申明,Stata在计算中会自动跳过这些缺失值。
数据清洗中,我们一般面临两种缺失值,其一为系统缺失值,即上文所述,这是针对计算机变量而言的缺失。其二为问卷的缺失值,这些缺失值往往是调查中由于拒绝回答、不知道等原因造成的,需要区别于系统缺失值,是针对调查结果的现实含义而言的。一般而言,问卷缺失值会具有其独特的编码。例如,以负数或是极大的数表示之,并加之以对应的值标签。这就涉及到标签操作。
1.2 预备知识:标签操作
所谓标签,就是对变量编码的“备注”。这里介绍变量标签(variable label)和值标签(value label)。
首先介绍变量标签。在Stata中,我们当然可以按照变量的现实含义为变量命名。但是出于简便的原则,我们会用一些诸如a1,a2的名称来命名变量。或者,当有好几种相近的变量,比如自己的收入和家庭的收入,我们也会用类似的方法为变量命名。这个时候,我们就需要为变量标签附上标签,以说明这个变量的含义。在Stata中,使用如下操作附加变量标签:
label variable VarName "变量描述"
其次介绍值标签。例如当变量gender取值1时,表示的现实含义是“性别为男”。那么,我们就对gender变量附加值标签。值标签会存储在数据文件的特定位置,并且与变量相独立。同一个值标签可以用于多个变量。在Stata中,使用如下操创建或修改值标签:
label define LabelName Value1 "Value’s Label 1" Value2 "Value’s Label2"
label define LabelName ValueNew "Value’s Label New", add
建立好值标签后,我们需要将值标签附加给变量。可以一次给多个变量附加上同一个标签。操作为:
label value VarList LabelName
可以通过describe
命令来查看一个变量的变量标签和值标签。不一样的是,变量标签的内容会直接显示,而值标签仅显示其标签名。需要用label list
命令查看具体的内容。操作如下:
label list LabelName
1.3 数据清洗的流程
数据清洗的流程如下:
- 是否有ID?ID是否唯一?
- 数据中是否有重复的条目?若有,则核查。
- 选择需要的变量,逐个审视。
- 是否已经有变量标签与值标签?(操作见第一章第二节)
- 变量的取值是否需要处理?
- 定性变量:非法值与缺失值;定量变量:异常值与缺失值。(操作见第二章)
- 多变量之间的逻辑关系检查,包括硬逻辑与软逻辑。
- 是否需要生成新变量?(操作见第二章)
- 保存do文件,以便核查。