全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
4245 8
2008-11-15
<p>各位大哥,小弟有一事不明,请教下</p><p>我有一个表,有三列,分为年份(year),月份回报率(Montly),资本规模(Size)</p><p>我现在需要做的是,基于年份,按照Size的十分位数,将样本分为10组,生成一个新的变量来定义组别:1,2,3,4......10</p><p>我不知道怎么来写这个程序,请大伙儿赐教。</p>
二维码

扫码加我 拉你入群

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

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

全部回复
2008-11-15 13:08:00


模拟数据输入:
set obs 10
gen year = 1990 +_n
expand 100
gen size = 100+ 10*invnormal(uniform())


根据题意我最先想到的方法:
sort year
gen group = 1
forval i = 10(10)90 {
 by year: egen p`i' = pctile(size), p(`i')
 replace group = (`i'/10 + 1) if size > p`i'
}
drop p*

可能比较简单的方法:
sort year size
by year: gen group2 = ceil(10*_n / _N)

验证通过:
assert group == group2

不知是否满足你的要求?也请论坛达人支招!

[此贴子已经被作者于2008-11-17 11:13:16编辑过]


eblog  金币 +5  金钱 +50  魅力 +20  奖励 2008-11-16 9:15:40
二维码

扫码加我 拉你入群

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

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

2008-11-15 15:45:00
第二个方法我不知道哪里出错了,没搞定。第一个方法非常好,我学到了不少。谢谢指教啊
二维码

扫码加我 拉你入群

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

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

2008-11-15 15:51:00
ding
二维码

扫码加我 拉你入群

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

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

2008-11-17 11:21:00
以下是引用gujun1225在2008-11-15 15:45:00的发言:
第二个方法我不知道哪里出错了,没搞定。第一个方法非常好,我学到了不少。谢谢指教啊

不好意思,第二个方法确实有错——我原来的思路是先定义并计算rank和total两个新变量,然后再计算group2,但最终给出的是简化程序,无需定义rank和total,一忙乱却忘记对程序作相应调整了。现已重新编辑原帖子,第二种方法可以用了。

[此贴子已经被作者于2008-11-17 11:22:53编辑过]

二维码

扫码加我 拉你入群

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

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

2008-11-17 12:58:00

可以直接用Pctile siz1=size, nq(10)

之后根据得到的10个分位点gen数据

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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