数据清洗|家庭分户问题解决思路与代码
在以家庭为单位的微观调查中,常使用家庭 fid
作为家庭识别码,并使用 pid
作为家庭成员的识别码。在通常情况下,一个家庭对应多个家庭成员的关系是稳定的。但是在微观调查中,由于对「家庭」和「家庭成员」的定义并不相同(例:视频、代码),在某些定义下,一些成员可能会脱离家庭,组建新的家庭,这种情况一般称作「家庭分户」问题。截面数据不存在分户问题,但在追踪家庭微观调查中,常存在这类分户问题。
这里不再讨论如何定义「家庭」和「家庭成员」,仅讨论如何解决分户问题。
1. 连续变量的分户问题
根据问卷中相关变量设置,CFPS 官方提供了一些综合收入综合指标。我们以 CFPS 的收入数据为例,解决从 2010 年来的连续变量的分户问题。
1 | * 收入相关综合变量及其含义 |
根据变量的含义不同,家庭分户问题的处理方式也不同。工资性收入、经营行收入、财产性收入、转移性收入、其他收入、家庭纯收入等六个指标应当进行加总,家庭人均收入可以考虑取均值。
因此,可以做如下操作:
1 | ** 均值: 家庭人均收入 |
需要注意的是,上述命令中的分组依据变量是
fid10
,与研究基期2010年对应。如果研究基期为2014年,可以改为
fid14
。
上面命令中,针对需要加总的六个变量,使用循环语句以精简代码。
2. 离散变量的分户问题
对于二值变量,以变量 fm1
「是否有人从事个体私营」为例,其取值包括三种情况:1=是,5=否,-8=不适用。现将该变量处理成0-1二值变量。
1 | g nfm1 = fm1 if inlist(fm1,1,5) // 删除不适用情况 |
然后,以2010年为基期,处理 nfm1
这个二值变量的针对家庭分户问题。处理方式仍然是使用均值法,由于上面计算得到的
nfm1
变量是一个 0-1 变量,按照 fid10
求均值后,取值应该在区间 [0,1]
上。只要分户后的家庭中至少有一个从事个体私营(取值为1),使用均值法计算后的取值应该落在区间
(0,1] 上。因此可以将区间 (0,1] 上的取值改为1。
1 | ** 取均值 |
对于多分类变量,大多可以使用二值变量和连续变量的方法处理,这里不再赘述。
3. 组合命令的使用
对于分户问题而言,均值和加总是最常用的方法。但是也有一些研究可能也会用到其他函数,例如最大值
max
,最小值 min
等。它们与上面使用均值和加总的函数基本上没有差别,只是需要根据研究需要调整函数类型。
需要注意的是,按照分户前的家庭编码计算出数值,只是解决分户问题的第一步。该步骤通常在逐年清洗数据时使用,在完成这一步后,需要删除掉因分户出现的重复样本。待完成所有变量的计算和样本的处理后,再来拼接成面板数据。
假设某项研究需要使用到 2010-2020 年 CFPS 家庭经济库中的收入数据,以下是组合命令的一个示范。
1 | ******************* 2012年 ******************* |
上面代码有几个需要注意的地方:
- 2010 年为基期,所以 2010 年不存在分户问题。2012-2020 年可能存在分户问题。
- 2012-2020 年分户问题可以使用循环语句简化代码,但是考虑到文件名称不一致、各年变量名称可能有所差异,实际数据清洗中不会使用循环语句完成,需要对数据进行逐年清理。
- 研究基期是 2010 年,所以 2012-2020
年用均值和加总解决分户问题时都是使用
fid10
作为分组依据,这个分组依据一般与删除重复样本的依据相对应,即duplicates drop
。
相关链接:
ereplace
和相关函数用法,参见:变量生成与替换duplicates drop
用法,参见:教对象 Stata 系列|第 2 课代码:变量管理与 IF 条件使用- 数据清洗相关视频、代码合集,参见:视频合集、Stata 数据清洗