oracle多条数据合并成一条_怎么把CFPS合并成面板数据?

fd7133a3f9c9e0168483ae66aff77f25.png

今天有同学问我怎么将每一期的CFPS合并到成一个panel。这涉及到在Stata中最常用的两个合并命令,mergeappend,其中merge是横向合并,用于追加变量。append是纵向合并,用于追加样本。多期截面组合成面板一般使用append命令。

下面我使用CFPS2014和CFPS2016做一个简单实例

首先导入CFPS2014中的adult数据,然后使用keep命令遴选出我们需要的变量。作为示范,我仅选了pid、provcd16等4个变量。由于append在进行合并的时候,是在同变量名后面追加样本,所以我们必须要保持各个文件的变量名一致。因此我们使用rename命令,更换各变量的name。最后在gen一个时间变量year,用于识别不同期的时间。把第一份数据保存下来。

cd /Applications/Stata/personal/CFPS/CFPS2014
use cfps2014adult_201906.dta, clear
keep pid provcd14 urban14 qea0
rename (provcd14 urban14 qea0)(provcd urban marriage)
gen year = 2014
save /Applications/Stata/personal/CFPS/CFPS2016/data1.dta, replace

再者,对第二份数据进行处理,重复上一步的操作。CFPS每一期的变量命名方式都会稍作修改,即使是保留相同的变量,变量名的编码也会稍有差异。我们使用keep保留我们需要的4个变量。使用rename修改好变量名,并生成一个时间变量。把它保存下来。

cd /Applications/Stata/personal/CFPS/CFPS2016
use cfps2016adult_201808.dta, clear
keep pid provcd16 urban16 qea0
rename (provcd16 urban16 qea0)(provcd urban marriage)
gen year = 2016
save data2.dta, replace

最后一步,使用append进行合并。首先要保证前面两个数据集是在同一文件夹下面,这样才比较方便合并。当然,你也可以在使用append的时候加入具体的文件存储路径。我们使用较为简单的前者。导入第二份数据,并把第一份数据追加进去。由此,即得到了一份非平衡面板数据。

use data2.dta, clear
append using data1.dta
order pid year
xtset pid year

输入order命令对变量排序,这样比较易读。输入xtset查看数据格式,可以发现,这是一份非平衡面板数据,时间跨度是2014-2016年。

. xtset pid year
       panel variable:  pid (unbalanced)
        time variable:  year, 2014 to 2016, but with gaps
                delta:  1 unit

一般而言,到此就结束了。但是有些同学喜欢平衡面板数据。这和时候可以引入egen命令中的count函数。如下所示,计算出变量pid的个数,仅保留pid个数为2的变量(pid为2,表示该样本有两期)。

bys pid: egen num = count(pid)
keep if num == 2
drop num
xtset pid year

最后得到的就是平衡面板了。

. xtset pid year
       panel variable:  pid (strongly balanced)
        time variable:  year, 2014 to 2016, but with gaps
                delta:  1 unit

其实CHFS、CHARLS之类的数据也可以做类似的处理。原理相同,只是具体方法不同,依操作者的具体思路而定。

以下是完整代码。

*-导入第一份数据
cd /Applications/Stata/personal/CFPS/CFPS2014
use cfps2014adult_201906.dta, clear
keep pid provcd14 urban14 qea0
rename (provcd14 urban14 qea0)(provcd urban marriage)
gen year = 2014
save /Applications/Stata/personal/CFPS/CFPS2016/data1.dta, replace

*-导入第二份数据
cd /Applications/Stata/personal/CFPS/CFPS2016
use cfps2016adult_201808.dta, clear
keep pid provcd16 urban16 qea0
rename (provcd16 urban16 qea0)(provcd urban marriage)
gen year = 2016
save data2.dta, replace

*-纵向合并
use data2.dta, clear
append using data1.dta
order pid year
xtset pid year
bys pid: egen num = count(pid)
keep if num == 2
drop num
xtset pid year
save data.dta, replace
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值