楼主: nihao111
4123 11

[数据管理求助] 急求变动分组gini系数计算,谢! [推广有奖]

  • 3关注
  • 2粉丝

教师

讲师

97%

还不是VIP/贵宾

-

威望
0
论坛币
10497 个
通用积分
11.0625
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
8192 点
帖子
314
精华
0
在线时间
926 小时
注册时间
2007-5-3
最后登录
2024-3-20

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
小弟现遇到问题了,百思不得其解,请教各位啦。
求解gini系数,标准是按户主年龄上下10岁并且属于同一省份。
比如,山东某户主36岁时,以山东26岁到46岁的小组计算一个收入的gini系数。比如下列数据
income province headage
100      山东        24
120      河北        35
210      天津        23
。。。。
注意组数是变动的,手工做太多了。
谢谢
二维码

扫码加我 拉你入群

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

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

关键词:province 百思不得其解 Income vince dage 山东 income 河北

本帖被以下文库推荐

受到警告 沙发
nihao111 发表于 2013-1-22 16:26:02 |只看作者 |坛友微信交流群
提示: 受到警告  蓝色 发帖格式不符规定,请参照版规发贴,谢谢 2013-1-28 23:24
提示: 该帖被管理员或版主屏蔽  蓝色 发帖格式不符规定,请参照版规发贴,谢谢 2013-1-28 23:24

使用道具

藤椅
monstersivle 发表于 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的值

要是能多给点儿数据就好了
已有 1 人评分经验 学术水平 热心指数 收起 理由
crystal8832 + 10 + 1 + 1 补偿

总评分: 经验 + 10  学术水平 + 1  热心指数 + 1   查看全部评分

不爱其亲而爱他人者,谓之悖德;不敬其亲而敬他人者,谓之悖礼。——《孝经》

使用道具

板凳
liangsky 发表于 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 以下就行。
已有 1 人评分经验 学术水平 热心指数 收起 理由
crystal8832 + 10 + 1 + 1 补偿

总评分: 经验 + 10  学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

报纸
nihao111 发表于 2013-1-29 22:56:59 |只看作者 |坛友微信交流群
monstersivle 发表于 2013-1-28 23:18
意思是这样的对照关系?

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

使用道具

地板
monstersivle 发表于 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

已有 4 人评分经验 论坛币 学术水平 热心指数 收起 理由
crystal8832 + 24 + 2 + 2 补偿
蓝色 + 100 + 2 热心帮助其他会员
nihao111 + 1 + 1 太棒了!
np84 + 1 热心帮助其他会员

总评分: 经验 + 24  论坛币 + 100  学术水平 + 3  热心指数 + 6   查看全部评分

不爱其亲而爱他人者,谓之悖德;不敬其亲而敬他人者,谓之悖礼。——《孝经》

使用道具

7
nihao111 发表于 2013-1-30 14:27:57 |只看作者 |坛友微信交流群
monstersivle 发表于 2013-1-30 01:02
use data,clear
gen gini=0
qui levelsof prov, local(prov)
仁兄双重循环太棒了,多谢!

使用道具

8
monstersivle 发表于 2013-1-30 21:15:40 |只看作者 |坛友微信交流群
nihao111 发表于 2013-1-30 14:27
仁兄双重循环太棒了,多谢!
不客气
不爱其亲而爱他人者,谓之悖德;不敬其亲而敬他人者,谓之悖礼。——《孝经》

使用道具

9
HM_CUHK 发表于 2013-9-20 21:26:54 |只看作者 |坛友微信交流群
monstersivle 发表于 2013-1-28 23:18
意思是这样的对照关系?

prov - headage - agegroup - gini
大侠,您民间高手呀,非常感谢!我想问一下,如何将gini系数存下来,形成一个新的变量,啓复为谢!

使用道具

10
HM_CUHK 发表于 2013-9-22 13:10:21 |只看作者 |坛友微信交流群
monstersivle 发表于 2013-1-30 01:02
use data,clear
gen gini=0
qui levelsof prov, local(prov)
大侠,还想请教一下,怎么返回其他系数,如atkinson呀,theil等等。。。谢谢

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-30 18:39