楼主: vincent829
10406 54

[其他] 如何定位是在哪个group [推广有奖]

11
vincent829 发表于 2009-7-5 19:06:44
公司含有缺失值的部分需要重新group,其他都不变
问题.xlsx (47.97 KB)

12
vincent829 发表于 2009-7-5 19:10:19
sungmoo提供的程序如下,希望对大家有帮助,但是我的数据有超过50K,按照原命令,得执行超过50k次。
use sheet1,clear
keep in 1/382
*替换缺失值
sort id year month
loc n=_N
forv i=1/`n'{
egen n=count(mv)
if n==_N {
continue,break
}
by id: replace mv=mv[_n+1] if mv==.&mv[_n+1]<.
drop n
}
drop n group
*确定组号
append using sheet2
sort mv group year
g x=(group[_n]+1==group[_n+1]&group<.)
replace group=sum(x)-x+1
drop x
drop if id==.
sort id year month

13
vincent829 发表于 2009-7-5 20:15:30
voodoo 发表于 2009-7-5 10:57
vincent829 发表于 2009-7-3 18:43
sample的id实际上是benchmark(population)的一部分。
sample有id(标识),year(年份),month(月份),mv(市场价值),return(月收益率)这几个变量,mv在1年是不变的。
population有id(标识),year(年份),group(组数)mv(市场价值)
我已经把这两个数据库按照id和year merge了。
按照你这种说法,你不是在population中已经对每一id都求得group了嘛(一点都没错,sample是population的一部分,但是这个问题还是存在,举例说,A公司1981年上市,但是MV的数值是从1982年才有的,于是1981年缺失值需要1982年的填充,这也造成了A公司在1981年没有group,我们需要用1982的值放在1981年的标准下看他属于哪个group,这样就能给A公司在1981年做一个合理的group定位),剩下的工作不过是将sample所需的id(及group)从population中提取出来即可。此外,population中的mv指的又是什么呢(指市场价值)
还是我理解错了?

14
sungmoo 发表于 2009-7-6 09:10:58
vincent829 发表于 2009-7-5 19:10 我的数据有超过50K,按照原命令,得执行超过50k次。
egen n=count(mv)
if n==_N {
continue,break

*用来:一旦完成任务,即跳出循环

15
sungmoo 发表于 2009-7-6 10:24:05
vincent829 发表于 2009-7-5 20:15 一点都没错,sample是population的一部分,但是这个问题还是存在,举例说,A公司1981年上市,但是MV的数值是从1982年才有的,于是1981年缺失值需要1982年的填充,这也造成了A公司在1981年没有group,我们需要用1982的值放在1981年的标准下看他属于哪个group,这样就能给A公司在1981年做一个合理的group定位)
楼主是不是只想给1981年的mv标志group号?

16
sungmoo 发表于 2009-7-6 10:42:55
*调整一下:只对sheet1中1981年各公司的mv按sheet2标记group号。不知是否符合想法?   
use sheet1,clear
keep in 1/382
*替换缺失值
sort id year month
loc n=_N
forv i=1/`n'{
egen n=count(mv)
if n==_N {
continue,break
}
by id: replace mv=mv[_n+1] if mv==.&mv[_n+1]<.
drop n
}
drop n
ren group gr
*确定组号
append using sheet2
sort year mv id month group
g x=(group[_n]+1==group[_n+1]&group<.) if year==1981
replace gr=sum(x)-x+1 if year==1981
drop x group
drop if id==.
ren gr group
sort id year month

17
sungmoo 发表于 2009-7-6 10:45:41
上面的命令组中,sheet1中各公司的非1981年的mv并没有按sheet2标记group号。

18
vincent829 发表于 2009-7-6 10:54:24
sungmoo 发表于 2009-7-6 10:24
vincent829 发表于 2009-7-5 20:15 一点都没错,sample是population的一部分,但是这个问题还是存在,举例说,A公司1981年上市,但是MV的数值是从1982年才有的,于是1981年缺失值需要1982年的填充,这也造成了A公司在1981年没有group,我们需要用1982的值放在1981年的标准下看他属于哪个group,这样就能给A公司在1981年做一个合理的group定位)
楼主是不是只想给1981年的mv标志group号?
不是,为了说明问题,我就贴了1981年的

19
vincent829 发表于 2009-7-6 10:56:47
sungmoo 发表于 2009-7-6 09:10
vincent829 发表于 2009-7-5 19:10 我的数据有超过50K,按照原命令,得执行超过50k次。
egen n=count(mv)
if n==_N {
continue,break

*用来:一旦完成任务,即跳出循环
我用提供的命令在我的样本里执行过好几次,大概每次都是前24次都是有# real changes made(#!=0),但是往后的就一直是0 real changes made,运行了好几千遍都没有结束,我每次只能break,所以我有了上面的疑问

20
sungmoo 发表于 2009-7-6 10:57:02
vincent829 发表于 2009-7-6 10:54 不是,为了说明问题,我就贴了1981年的
那么,你的sheet2应该含有其他年份的group号了?

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-5 12:53