全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
4708 11
2013-01-22
小弟现遇到问题了,百思不得其解,请教各位啦。
求解gini系数,标准是按户主年龄上下10岁并且属于同一省份。
比如,山东某户主36岁时,以山东26岁到46岁的小组计算一个收入的gini系数。比如下列数据
income province headage
100      山东        24
120      河北        35
210      天津        23
。。。。
注意组数是变动的,手工做太多了。
谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-1-22 16:26:02
受到警告
提示: 该帖被管理员或版主屏蔽
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-28 23:18:05
意思是这样的对照关系?

prov - headage - agegroup - gini
A - x - (x-10, x+10) - gini
可以根据这个做个组变量,也就是prov 和agegroup联立定义组,
然后用
ineqdeco income, bygroup(组变量)
提取每组的gini系数,用标量 r(gini_k)    Gini for each subgroup k
生成或是替代一个新变量Gini的值

要是能多给点儿数据就好了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-29 14:59:10
假设需要计算的26~46岁分别前后十年的数据
forv i=26/46 {
preserve
keep if headage>=`i'-10 & headage<=`i'+10
run 程序,
产生结果,变量最好依据`i'分别命名
save data`i'.dta,replace
restore
merge 回来数据

}
replace 以下就行。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-29 22:56:59
monstersivle 发表于 2013-1-28 23:18
意思是这样的对照关系?

prov - headage - agegroup - gini
谢仁兄,就是不会把两个变量合做一个组变量啊
解决了利用这个下面的也就解决了。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-30 01:02:16
nihao111 发表于 2013-1-29 22:56
谢仁兄,就是不会把两个变量合做一个组变量啊
解决了利用这个下面的也就解决了。。。
gini-prov-age.zip
大小:(34.68 KB)

 马上下载


use data,clear
gen gini=0
qui levelsof prov, local(prov)
foreach i of local prov {
        qui levelsof headage if prov=="`i'", local(age)
        foreach j of local age {
                qui ineqdeco income if prov=="`i'" & inrange(headage,`j'-10,`j'+10)
                replace gini=`r(gini)' if prov=="`i'" & headage==`j'
        }
}
以上程序经测可行,就是慢(因为嵌套循环,一步步的,只两个省,样本大小:10127,
A省观测值有5236个,年龄不同值有93个;
B省观测值有4891个,年龄不同值有89个 ,
execute了近1分钟吧),
另外因为没有数据,我随便找了一个数据集,所以headage有小于10的,就当是orphan吧

没有像之前说的那样设置组(以配合ineqdeco的option-bygroup(...)),因为设置组的话必然会有重叠overlapped的(由于正负10的范围,这个就跟“分”组的概念冲突了,没分开,叠着呢);
另,生成很多新变量(做组判定条件)的话有些麻烦;
再,每步限定观测值生成目标值gini,存出去到新数据集,再合并merge回来,
不如用本地宏local macro来做当前数据集的内部调整来得方便。

后记:
通过解这个问题,我发现了levelsof的新用法,就是与foreach .. of local ... {...}的连用,比我之前用egen .. =group(varlist)新生成组变量,然后循环取组变量值,便捷多了。

查看不同值的程式:bysort prov: distinct headage
结果:
-> prov = A
         |        Observations
         |      total   distinct
---------+----------------------
headage |       5236         93
-> prov = B
         |        Observations
         |      total   distinct
---------+----------------------
headage |       4891         89
作图:
qui levelsof prov, local(prov)
foreach i of local prov{
        line gini headage if prov=="`i'", saving(`i',replace) ///
        title("Province `i'")
}
graph combine `prov', ///
title("Gini for each age group in each province") ///
note("for each level of headage, the gini corresponds to the group of households" ///
"with the head members aged within the range of current headage+/-10.")
graph export gini-age.pdf,replace
gini-age.jpg
附件列表
gini-age.jpg

原图尺寸 389.45 KB

gini-age.jpg

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群