cfps 中国家庭追踪调查数据 stata数据处理分享(数据缩尾,分年分省按人均收入排序 基尼系数测算,剔除重复变量,横向合并 少儿老年抚养比计算,纵向合并 )

    use "C:\Users\Administrator\Desktop\CFPS2020\cfps2020famecon_202306.dta" ,clear


//1合并面板的前提


    *计算20 18 16 三年家庭编码一致的和总家庭对比有多少 保存三年一致,便于做面板
    count 
    count if fid20== fid18 & fid18== fid16 & fid16== fid14 
    count if fid20== fid18 & fid18== fid16 & fid16== fid14 & /// 
    fid14== fid12 & fid12== fid10
    keep if fid20== fid18 & fid18==fid16 & fid16== fid14
       


//2 先是对截面数据的处理

//2.1计算各个省份的基尼系数

    *对收入,人均收入 连续变量的极端值进行缩尾处理  
    codebook fincome1
    winsor2 fincome1
    winsor2 fincome1_per
    *查看各个省份有多少家庭
    bysort provcd20:count
    *计算各个省份的基尼系数(陈传波十八讲)
    bysort  cyear provcd20 (fincome1_per): egen tp=sum(familysize20)  //分年份分省份求人数总和(整体加总)
    bysort  cyear provcd20 (fincome1_per): egen tinc=sum(fincome1)   //分年份分省份求收入总和
    *省级代表性 五个省份 41河南 31上海 21辽宁 62甘肃  44广东
    keep if provcd20==41 |  provcd20==31 |  provcd20==21 |  provcd20==62 |  provcd20==44
    count
        /*-----by  bysort的用法------- 
        上述例子是按照foreign这个变量来分组,然后加总每组内price变量的值,并将加总的值保存在TotalPrice变量中。对于bys这行命令,有时候我们会看到下面这种写法:
        bys foreign (make):egen TotalPrice = sum(price)
        bys后面的变量多了个括号,这是什么意思呢?实际上,这相当于如下命令:
        sort foreign make
        by foreign: egen TotalPrice = sum(price)
        换言之,make这个变量在分组求和过程中不起作用,而仅在dataset展示数据的时候起作用(分组列示)*/
    by  cyear provcd20 :gen p=familysize20/tp //家庭人数占总人数的比例   
    by  cyear provcd20 :gen w=fincome1_w/tinc   //家庭收入占总收入的比例
    by  cyear provcd20 :gen q=sum(w)   //收入的求和 (累计加总而非总体加总,和egen的区别)
    by  cyear provcd20 :egen onesubtractgini=sum(p*(2*q-w))  //基尼系数的公式
    gen gini=1-onesubtractgini           //显示分省基尼系数


    
//2.2 户主的个人变量信息——横向合并

  //2.2.1为横向合并户主个人信息做准备,删除重复的户主样本,保证一个家庭一个户主    

    *家庭财务回答人和家庭编号 是否有重复,保证一个家庭一个户主
    duplicates report fid20
    duplicates report resp1pid
    duplicates list resp1pid
    *删除重复出现的财务回答人所在家庭(46)样本  利用重复标记生成变量
    duplicates tag resp1pid,generate(dup)  
    count if dup==1
    drop if dup==1
    duplicates report resp1pid
    *把家庭库的resp1pid改成pid 方便与个人库合并,把个人库的Pid和财务回答人相对应
    *pid 格式为double时不会出现重复
    gen double pid=resp1pid
    duplicates report pid
    codebook pid
  


  //2.2.2合成获得户主个人信息——横向合成
    


    *合并成人个人库 年龄 受教育 婚姻等数据 
    merge 1:1 pid using "C:\Users\Administrator\Desktop\2020待合并person数据库.dta"
    keep if _merge==3
    drop _merge
    rename age age0

//2.3计算少儿老年抚养比 合并家庭每个成员的年龄信息——横向合成

        /*单个的代码
        //第一个家庭成员合并
      
        *删除家庭编号重复的(同一个人在两个家庭)为合并得到家庭成员的年龄做准备
        duplicates list pid_a_1
        duplicates tag pid_a_1, generate(dup1)  
        count if dup1==1
        drop if dup1==1 & pid_a_1 !=-8  //不适用的重复的不进行删除
        duplicates report pid_a_1
        
        *合并person库(成人和部分个人)中的家庭成员年龄
        merge m:1 pid_a_1 using "C:\Users\Administrator\Desktop\2020待合并person数据库.dta",keepusing(age) gen(_merge1)
        rename age age1
        codebook age1
        tab age1
        keep if  _merge1==3 | _merge1==1  //保留成功匹配的家庭成员年龄,以及经济库中未匹配上的家庭成员编号
        
        *合并少儿代答库的年龄
        merge m:1 pid_a_1 using "C:\Users\Administrator\Desktop\2020待合并childproxy数据库.dta",keepusing(age) gen(_mergec1)
        rename age agec1
        codebook agec1
        tab agec1
        keep if _mergec1==1 | _mergec1==3
        *完成第一个家庭成员的合并
        replace age1=agec1 if age1==. & agec1 >=0 & _mergec1==3  //假如匹配上的情况下,第一个age1 是缺失的,第二个不是缺失的,进行替换
        drop if age1==. & pid_a_1 != -8  //删除 非不适用 且 匹配不上的
        
        //第二个家庭成员的合并
        
        *删除家庭编号重复的(同一个人在两个家庭)为合并得到家庭成员的年龄做准备
        duplicates list pid_a_2
        duplicates tag pid_a_2, generate(dup2)  
        count if dup2==1
        drop if dup2==1 & pid_a_2 !=-8  //不适用的重复的不进行删除
        duplicates report pid_a_2
        
        *合并person库(成人和部分个人)中的家庭成员年龄
        merge m:1 pid_a_2 using "C:\Users\Administrator\Desktop\2020待合并person数据库.dta",keepusing(age) gen(_merge2)
        rename age age2
        codebook age2
        tab age2
        keep if  _merge2==3 | _merge2==1  //保留成功匹配的家庭成员年龄,以及经济库中未匹配上的家庭成员编号
        
        *合并少儿代答库的年龄
        merge m:1 pid_a_2 using "C:\Users\Administrator\Desktop\2020待合并childproxy数据库.dta",keepusing(age) gen(_mergec2)
        rename age agec2
        codebook agec2
        tab agec2
        keep if _mergec2==1 | _mergec2==3
        
        *完成第一个家庭成员的合并
        replace age2=agec2 if age2==. & agec2 >=0 & _mergec2==3  //假如匹配上的情况下,第一个age1 是缺失的,第二个不是缺失的,进行替换
        drop if age2==. & pid_a_2 != -8  //删除 非不适用 且 匹配不上的
        
        前两个代码到此为止*/
    
//直接循环15个家庭成员的合并 第n个家庭成员的合并
duplicates list pid_a_2
forvalues i=1/15{
*删除家庭编号重复的(同一个人在两个家庭)为合并得到家庭成员的年龄做准备
    duplicates tag pid_a_`i', generate(dup`i')  
    count if dup`i'==1
    drop if dup`i'==1 & pid_a_`i'!=-8  //不适用的重复的不进行删除
    duplicates report pid_a_`i'
    
    *合并person库(成人和部分个人)中的家庭成员年龄
    merge m:1 pid_a_`i' using "C:\Users\Administrator\Desktop\2020待合并person数据库.dta",keepusing(age) gen(_merge`i')
    rename age age`i'
    codebook age`i'
    tab age`i'
    keep if  _merge`i'==3 | _merge`i'==1  //保留成功匹配的家庭成员年龄,以及经济库中未匹配上的家庭成员编号
    *合并少儿代答库的年龄
    merge m:1 pid_a_`i' using "C:\Users\Administrator\Desktop\2020待合并childproxy数据库.dta",keepusing(age) gen(_mergec`i')
    rename age agec`i'
    codebook agec`i'
    tab agec`i'
    keep if _mergec`i'==1 | _mergec`i'==3
    *完成第一个家庭成员的合并
    replace age`i'=agec`i' if age`i'==. & agec`i' >=0 & _mergec`i'==3  //假如匹配上的情况下,第一个age`i' 是缺失的,第二个不是缺失的,进行替换
    drop if age`i'==. & pid_a_`i' != -8  //删除 非不适用 且 匹配不上的
}
// 开始计算少儿老年抚养比
forval i=1/15{
gen child`i'=1 if age`i'>=0 & age`i'<=16 
}
forval i=1/15{
gen oldperson`i'=1 if age`i'>=65 & age`i'<=1000
}         //采用两个循环是因为后文的rowtotal命名,使得child和oldperson分开
gen 家庭规模=familysize20
egen 少儿抚养总数=rowtotal(child1-child15)
egen 老人抚养总数=rowtotal(oldperson1-oldperson15)
gen 少儿抚养比=少儿抚养总数/家庭规模
gen 老年抚养比=老人抚养总数/家庭规模

    /*合并家庭关系库 少儿抚养比 老年抚养比 等数据
    merge 1:1 fid20 using "C:\Users\Administrator\Desktop\2020待合并famconf数据库.dta" 
    keep if _merge==3
    count if total_asset<0 */

*家庭规模和familysize20一样的意思 进行初步回归
             

             
//2.4家庭有关变量的处理


*家庭纯收入取对数 家庭净资产取对数
gen lnfincome=ln(fincome1)
gen lntotal_asset=ln(total_asset)
gen lnexpense=ln(expense)
winsor2 total_asset
winsor2 expense


//2.5截面数据回归

reg lnexpense gini
reg lnexpense gini age0 age的平方 gender marrige  cfps2020eduy_im
reg expense gini age0 age的平方 gender marrige familysize20 cfps2020eduy_im 少儿抚养比 老年抚养比 fincome1 total_asset
reg lnexpense gini age0 age的平方 gender marrige familysize20 cfps2020eduy_im 少儿抚养比 老年抚养比  lnfincome lntotal_asset
estimates store reg1
esttab reg1, star(* 0.10 ** 0.05 *** 0.01)

reg qn8012 gini age0 age的平方 gender marrige familysize20 cfps2020eduy_im 少儿抚养比 老年抚养比  lnfincome lntotal_asset
reg lnexpense qn8012 gini age0 age的平方 gender marrige familysize20 cfps2020eduy_im 少儿抚养比 老年抚养比 lnfincome lntotal_asset
save "C:\Users\Administrator\Desktop\2020待合并总库",replace

//3.面板数据回归


//3.1面本数据纵向合并

append using  "C:\Users\Administrator\Desktop\2018待合并总库.dta"
append using  "C:\Users\Administrator\Desktop\2016待合并总库.dta"
replace cyear = cyear-1 if cyear==2017 | cyear==2019

xtset fid16 cyear,delta(2) 
xtdes

reg  lnexpense gini age0 age的平方 gender marrige familysize cfpseduy_im 少儿抚养比 老年抚养比  lnfincome lntotal_asset,vce(cluster fid16)
estimate store ols

xtreg  lnexpense gini age0 age的平方 gender marrige familysize cfpseduy_im 少儿抚养比 老年抚养比  lnfincome lntotal_asset,fe r
estimate store FE_robust

问题 为什么最后跑出来标准误和t统计量都是.,系数后面全是.如图:


 

  • 30
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值