楼主: gujun1225
4308 8

[其他] 请教一个分组的程序写法 [推广有奖]

  • 0关注
  • 12粉丝

VIP

已卖:741份资源

讲师

58%

还不是VIP/贵宾

-

威望
0
论坛币
5315 个
通用积分
57.0027
学术水平
98 点
热心指数
127 点
信用等级
58 点
经验
23046 点
帖子
423
精华
0
在线时间
624 小时
注册时间
2007-9-17
最后登录
2024-8-30

楼主
gujun1225 发表于 2008-11-15 10:45:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
<p>各位大哥,小弟有一事不明,请教下</p><p>我有一个表,有三列,分为年份(year),月份回报率(Montly),资本规模(Size)</p><p>我现在需要做的是,基于年份,按照Size的十分位数,将样本分为10组,生成一个新的变量来定义组别:1,2,3,4......10</p><p>我不知道怎么来写这个程序,请大伙儿赐教。</p>
二维码

扫码加我 拉你入群

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

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

关键词:size year mont 回报率 分位数 我不知道 程序 大哥 规模 样本

沙发
voodoo 发表于 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
巫毒上传,必属佳品!
坛友下载,三思后行!

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

板凳
wangbaojiang 发表于 2008-11-15 15:51:00
ding

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

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

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

巫毒上传,必属佳品!
坛友下载,三思后行!

地板
maximus11111 发表于 2008-11-17 12:58:00

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

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

7
voodoo 发表于 2008-11-17 20:50:00
以下是引用maximus11111在2008-11-17 12:58:00的发言:

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

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

pctile may not be combined with by,因此还需要建立个循环forval yr = 1991/2000 {...}才能计算各个年度的分位数并依次完成分组。思路如此,具体实施起来好像还挺复杂,有请maximus多多赐教,给出完整程序。

模拟数据就用:
clear
set obs 10
gen year = 1990 +_n
expand 100
gen size = 100+ 10*invnormal(uniform())
sort year


巫毒上传,必属佳品!
坛友下载,三思后行!

8
arlionn 在职认证  发表于 2008-11-20 09:09:00

sort size

gen gsize = group(10)

然后根据gsize变量进行分析即可。

9
voodoo 发表于 2008-11-21 18:21:00
以下是引用arlionn在2008-11-20 9:09:00的发言:

sort size

gen gsize = group(10)

然后根据gsize变量进行分析即可。

受教!我用如下命令试过完全可行:
sort year size
by year: gen gsize = group(10)

可惜,在stata中竟然找不到关于group()的进一步说明(我用help group() )不知何故?请arlionn进一步赐教。

巫毒上传,必属佳品!
坛友下载,三思后行!

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-26 10:05