全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
4307 4
2010-04-01
本人最近遇到如下数据处理问题,搞了好久没搞出来,只好来这里请高手帮忙了!!希望大家能帮帮我!!
数据如下:
dmjdjjjctzlxjjjzgpszgpblzcg1zcg1dmzcg1blzcg2zcg2dmzcg2blzcg3zcg3dmzcg3blzcg4zcg4dmzcg4blzcg5zcg5dmzcg5bl
1200403华夏成长13.62E+092.64E+090.7307南方航空6000290.0659中国联通6000500.0537西山煤电9830.0457宝钢股份6000190.0408兖州煤业6001880.0378
1200406华夏成长13.03E+092.26E+090.745上海机场6000090.0568南方航空6000290.0504宝钢股份6000190.0499中国石化6000280.049招商银行6000360.0472

想做的处理为:如果第一条和第二条记录中同时某一股票(zcgdm),则用第二条记录的股票对应的比率(zcgbl)减去上一条记录的比率,如第一条和第二条记录中都用代码为6000029的南方航空和代码为600019的宝钢股份,则此时用wijt记录0.0504-0.0759;  0.049-0.0408
然后生成另一张数据表:
dmjdjjjctzlxgpgpdmwijt
1200403华夏成长1南方航空600029-0.0255
1200406华夏成长1宝钢股份6000190.0082

请问上面这些数据处理如何做??拜托各位了!!!
二维码

扫码加我 拉你入群

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

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

全部回复
2010-4-3 21:17:23
the table does not have these numbers: 0.0504-0.0759;  0.049-0.0408

can you be more specific?
二维码

扫码加我 拉你入群

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

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

2010-4-4 00:09:22
试试:
reshape long zcg zcg@dm zcg@bl, i(dm jd) j(rank)
replace jd = yq(int(jd/100), (mod(jd,100)/3))
format jd %tq
bysort dm zcg (jd): gen wijt = zcgbl-zcgbl[_n-1] if jd - jd[_n-1]==1
keep if wijt != .
ren zcg gp
ren zcgdm gpdm
keep dm jd jjjc tzlx gp gpdm wijt
二维码

扫码加我 拉你入群

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

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

2010-4-4 00:17:29
从经济的意义上说,你对数据的处理有点问题。
比如中国联通200403季度位列前五,且其zcgbl=0.0537,而下一季度则跌出前五,则根据你的思路示例,最终数据表中没有中国联通的数据。
个人认为最终数据表中应该包括中国联通的数据,但由于缺乏下一季度的zcgbl数据,其wijt的计算只能想个办法尽可能合理设定。
考虑上述因素之后的程序示例如下:

// 生成模拟数据,只包括关键变量
clear
set obs 20
gen dm = _n
expandcl = 8+floor(9*uniform()), cl(dm) gen(cl)
drop cl
sort dm
by dm: egen N = count(dm)
by dm: gen jd = tq(2008-4)-N+1 if _n==1
by dm: replace jd = jd[_n-1]+1 if _n>1
format jd %tqCCYY!Qq
drop N
// 生成随机不重复持仓股票代码
// 参见:http://www.stata.com/statalist/archive/2002-06/msg00261.html
expand 15
bysort dm jd: gen zcg = _n
gen zcgbl = 0.03+0.02*invnormal(uniform())
bysort dm jd (zcgbl): drop if _n <=10
tostring zcg, format(%06.0f) replace
bysort dm jd (zcgbl): gen rank = 6-_n
reshape wide zcg zcg@bl, i(dm jd) j(rank)
save sample, replace

// main
use sample, clear
reshape long zcg zcg@bl, i(dm jd) j(rank)
bysort dm jd (rank): keep if _n==_N
keep dm jd zcgbl
xtset dm jd
gen L_min_bl = L.zcgbl
gen F_min_bl = F.zcgbl
keep dm jd L F
save minbl, replace
use sample, clear
reshape long zcg zcg@bl, i(dm jd) j(rank)
merge dm jd using minbl
drop _merge
gen wijt = .
sort dm zcg jd
by dm zcg: gen byte stay5 = (jd-jd[_n-1]==1)   // 连续进入前五样本
replace wijt = zcgbl-zcgbl[_n-1] if stay5
by dm zcg: gen byte enter5 = (jd-jd[_n-1]!=1)  // 本季度进入前五样本
replace wijt = zcgbl-L_min_bl if enter5
by dm zcg: gen byte nexit5 = (jd-jd[_n+1]!=-1)  // 下季度退出前五样本
expand = nexit5+1, gen(exit5)
replace jd = jd+1 if exit5
replace stay5 = 0 if exit5
replace enter5 = 0 if exit5
replace wijt = zcgbl-F_min_bl if exit5
keep if wijt != .
ren zcg gp
sort dm gp jd
keep dm jd gp wijt stay5 enter5 exit5
save last, replace
二维码

扫码加我 拉你入群

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

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

2010-4-5 13:57:24
ylhenry 发表于 2010-4-1 10:43
本人最近遇到如下数据处理问题,搞了好久没搞出来,只好来这里请高手帮忙了!!希望大家能帮帮我!!
数据如下:
dmjdjjjctzlxjjjzgpszgpblzcg1zcg1dmzcg1blzcg2zcg2dmzcg2blzcg3zcg3dmzcg3blzcg4zcg4dmzcg4blzcg5zcg5dmzcg5bl
1200403华夏成长13.62E+092.64E+090.7307南方航空6000290.0659中国联通6000500.0537西山煤电9830.0457宝钢股份6000190.0408兖州煤业6001880.0378
1200406华夏成长13.03E+092.26E+090.745上海机场6000090.0568南方航空6000290.0504宝钢股份6000190.0499中国石化6000280.049招商银行6000360.0472

想做的处理为:如果第一条和第二条记录中同时某一股票(zcgdm),则用第二条记录的股票对应的比率(zcgbl)减去上一条记录的比率,如第一条和第二条记录中都用代码为6000029的南方航空和代码为600019的宝钢股份,则此时用wijt记录0.0504-0.0759;  0.049-0.0408
然后生成另一张数据表:
dmjdjjjctzlxgpgpdmwijt
1200403华夏成长1南方航空600029-0.0255
1200406华夏成长1宝钢股份6000190.0082

请问上面这些数据处理如何做??拜托各位了!!!
不知3、4楼的程序运行结果如何,希望你能以附件形式贴一部分数据上来,最好能是.dta格式的。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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