楼主: 落花成尘
3821 2

[面板数据求助] 做 event study 出现问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

0%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0.4303
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
63 点
帖子
5
精华
0
在线时间
28 小时
注册时间
2015-1-20
最后登录
2015-10-8

楼主
落花成尘 发表于 2015-2-16 20:14:25 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大神求助!我是stata新手,做stata数据出现问题啦!
我们用的是普林斯顿的event study  http://dss.princeton.edu/online_help/stats_packages/stata/eventstudy.html
我们是做收购的event, 很多公司在相同的一年有很多收购,这些事件发生的时间都不相同。但是代码只能取第一个,后面的几笔同公司收购全部都自动删除掉了。
可是这会影响我们的结果……
有没有什么办法能够保留所有的收购,而不是每个公司保留一笔?或者是不是代码中出现了什么限制呀?我上传下我们的一年的数据,希望有大神能够帮我们解答,谢谢啦!

use stockdata1981.dta, replace

sort company_id date
replace prc= abs(prc)
by company_id: gen ret= (prc - prc[_n-1])/prc[_n-1]

merge m:m company_id using eventdates1981.dta

keep if _merge==3
sort company_id date
by company_id: gen datenum=_n
by company_id: gen target=datenum if date==event_date
egen td=min(target), by(company_id)
drop target
gen dif=datenum-td

*set the window*
by company_id: gen event_window=1 if dif>=-1 & dif<=1
egen count_event_obs=count(event_window), by(company_id)
by company_id: gen estimation_window=1 if dif<=-6 & dif>=-205
egen count_est_obs=count(estimation_window), by(company_id)
replace event_window=0 if event_window==.
replace estimation_window=0 if estimation_window==.

*list of company_ids that do not have enough observations within the event and estimate window*
set more off
tab company_id if count_event_obs<3
tab company_id if count_est_obs<200

*drop if not enough*
drop if count_event_obs < 3
drop if count_est_obs < 200
drop count_event_obs count_est_obs

*Estimating Normal Performance*
set more off /* this command just keeps stata from pausing after each screen of output */

gen predicted_return=.
egen id=group(company_id)

/* for multiple event dates, use: egen id = group(group_id) */
forvalues i=1(1)98 { /*note: replace N with the highest value of id */
        l id company_id if id==`i' & dif==0
        reg ret market_return if id==`i' & estimation_window==1
        predict p if id==`i'
        replace predicted_return = p if id==`i' & event_window==1
        drop p
}  

*Abnormal and Cumulative Abnormal Returns*
sort id fyear
gen abnormal_return=ret-predicted_return if event_window==1
sort company_id
by company_id: egen cumulative_abnormal_return = sum(abnormal_return)
sort id
egen evacar = mean(abnormal_return)
*Testing for Significance*
sort id date
by id: egen ar_sd = sd(abnormal_return)
gen test =(1/sqrt(98)) * ( cumulative_abnormal_return /ar_sd)
list company_id cumulative_abnormal_return test if dif==0

*output*

outsheet  company_id event_date cumulative_abnormal_return test using stats.csv if dif==0, comma names

*Testing Across All Events*
reg cumulative_abnormal_return if dif==0, robust


而且中间出现了一个问题,就是在做循环回归的时候,98个公司到51就不跑了,说是 no observation, 不明白这是怎么回事嗷呜……


多谢各位大神!
二维码

扫码加我 拉你入群

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

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

关键词:event study study Event Even vent 普林斯顿 公司收购 影响

stockdata1981.dta
下载链接: https://bbs.pinggu.org/a-1733712.html

46.32 MB

eventdates1981.dta

6.99 KB

car1981.do

2.17 KB

沙发
aeryyc 发表于 2015-2-16 23:42:14
楼主你这个问题非常具体啊,哈哈。
1)不应该用merge m:m。 Stata help file里面说,虽然m:m的选项存在,但是建议用户永不使用。。。你是不是用1:m的时候出现说master data有duplicates,所以改用m:m啊?如果是的话,我建议你先把stock data整理一下,删掉重复项,再用1:m,应该就能生成一家公司对多个事件的数据了。
2)关于你的第二个问题,我暂时没时间细看。你跑到这个loop之前先试一下指令count if id==51 & estimation_window==1 ,看看是不是0。
已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
黃河泉 + 3 + 3 + 3 的确这辈子都不要用 m:m 之 merge!
hustchen2012 + 10 + 10 + 1 + 1 热心帮助其他会员
crystal8832 + 24 + 1 + 1 热心帮助其他会员

总评分: 经验 + 10  论坛币 + 34  学术水平 + 5  热心指数 + 5  信用等级 + 3   查看全部评分

藤椅
筆落詩成 发表于 2017-8-4 13:33:12
aeryyc 发表于 2015-2-16 23:42
楼主你这个问题非常具体啊,哈哈。
1)不应该用merge m:m。 Stata help file里面说,虽然m:m的选项存在,但 ...
如果同个公司不同年度发生并购事件,该如何界定事件日dif呢?

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

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