Stata初步处理CFPS数据(merge)

首先介绍一下我自己的情况,是一个还在读本科的stata小白,由于一些原因必须使用stata进行数据处理,从2.20到现在,前后近近两周时间,磕磕绊绊后终于完成了一些进度。由于自己起步的时候太困难了,所以想给像我一样的小白们提供一些思路。也请各路大神多多批评指正。

首先,我从官网下载了我需要的三年数据。

然后,保留出了我需要的一些变量,并且为它们重命名。

cd D:\CFPS数据\2010
use cfps2010adult_202008.dta,clear
keep pid fid provcd %%保留三个所需变量
rename (fid provcd)(fid2010 province) %%重命名变量
gen year=2010 %%在横截面数据中添加变量“年份”
save D:\CFPS数据\cfps2010adult.dta,replace %%用覆盖的方式保存数据

其他两年的数据也是同样道理,这样,我们就有了2010,2011和2012的三年数据及其中所需变量。

接着,我需要将三年数据进行匹配,找出三年中都有的id及他们的数据。并且将不符合条件的id全部清除。

%%首先,给2010年的数据按照pid进行排序(其他两年也同样用该代码复制粘贴即可)
use D:\CFPS数据\cfps2010adult_202008.dta,clear
sort pid
save D:\CFPS数据\cfps2010adult.dta,replace

%%然后,用1:1的方式以pid匹配数据
merge 1:1 pid using D:\CFPS数据\cfps2010adult.dta
%%将匹配结果以生成一个新变量_merge显示出来
tab _merge
%%将完全匹配上的数据保留,未匹配上pid的数据删除
keep if _merge==3

在这里要进行一点说明,如果我们需要将三年的数据进行统一,我的处理方法是两年两年进行统一,可以先用2010年的数据将2011年和2012年的数据进行统一,然后就可能出现一种情况:在我们进行完上面的代码操作之后,2011年和2012年的数据确实与2010年的完全匹配上了,但是这三年的数据量还是不一样。

如果出现以上的情况,我建议的处理方法是先把2011和2012年的_merge变量用drop _merge先删掉,然后找出三年中数据量最少的那年数据,以它为基准,对剩下两年的数据用merge语句进行进一步的匹配处理。如果不把之前的merge删掉,那么stata就会显示出错哈(:别问我是怎么知道的,问就是我就是这么一次次被stata折磨过来的)

上面的步骤结束之后,我们就全部结束了数据匹配工作,接下来就可以进行一些有关变量值的处理,如codebook pid语句可以查看变量pid的基本情况,比如数据量和缺失值情况,然后可以根据我们的需求进行数据缺失值的删除——直接使用下面这段代码即可。

eden mis =rowmiss(:all)
drop if mis

好叭,以上就是本篇博客的全部内容,如果能够帮助到同样作为新手小白的你,我将万分荣幸。也希望你们能够像我一样多多把自己的经验显示出来,方便更多的友友们涉水stata或者其他编程语言哇~前人栽树后人乘凉嘛哈哈。

上一篇:无法复制出“晋升锦标赛理论”的实证结果? 5篇代表性文献的结论都缺乏稳健性!


下一篇:数据结构和算法-循环链表