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统计量都是.,系数后面全是.如图: