关于本站
人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!
经管之家新媒体交易平台
提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】
期刊
- 期刊库 | 马上cssci就要更新 ...
- 期刊库 | 【独家发布】《财 ...
- 期刊库 | 【独家发布】“我 ...
- 期刊库 | 【独家发布】“我 ...
- 期刊库 | 【独家发布】国家 ...
- 期刊库 | 请问Management S ...
- 期刊库 | 英文期刊库
- 核心期刊 | 歧路彷徨:核心期 ...
TOP热门关键词
免费学术公开课,扫码加入 |
大家好,麻烦大家帮忙解决一下下面这个问题。就是前半部分是stata的程序语句,前面都还好,就是最后一个forv循环,需要用到d3和d2_1这两个文件,但数据里面并没有给出来,只能是从后面的SAS程序生成。但我不懂SAS软件,各位大侠能不能帮忙读一下后面的SAS程序,具体是什么意思?怎么生成d3和d2_1这两个文件?谢谢!
第一次弄这个悬赏,并不知道多少合适,先谢谢大家了。
STATA 程式語法
/* 假設在電腦中已經有儲存資料集的 STATA 格式 */
. cd h:\ch3
. use mkt_ret
. sort date
. use ret_m, clear
. merge m:1 date using mkt_ret
Result #of obs.
-----------------------------------------
not matched 0
matched 71,873(_merge==3)
-----------------------------------------
/* 合併iclink 與 CRSP */
. drop _merge
. merge m:1 permno using iclink
Result #of obs.
-----------------------------------------
not matched 50,425
from master 50,425(_merge==1)
from using 0(_merge==2)
matched 21,448(_merge==3)
-----------------------------------------
/* 保留非缺失資料 */
. keep if _merge==3
(50425 observations deleted)
.drop _merge
/* 先將前述合併完檔案暫存為d2 */
save d2
. use ibes_sp, clear
. sort ticker
. by ticker: gen eventcount=_n
/* 以 forv 方式產生 anndates1~anndates11 */
. forv k=1(1)11 {
2.use d3, clear
3.keep if eventcount==`k'
4.save eventcount, replace
5.use d2_1, clear
6.sort ticker
7.merge m:1 ticker using eventcount
8.rename anndats anndates`k'
9.drop _merge
10.save d2_1, replace
11.}
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
SAS程序语句:
**設定永久資料集路徑 Ch 3;
libname Ch3 'd:\Ch3_Rev\Data\';
/*----------------實例演練--------------------------*/
**合併個股與市場月報酬率資料集;
proc sql;
create table d1 as select distinct
a.*,b.vwretd as ret_mkt
fromch3.ret_m as a left join ch3.mkt_ret as bona.date=b.date
orderby a.permno, a.date;
quit;
* 合併iclink 與 CRSP;
proc sql;
create table d2 as select
*, year(a.date) as cyear
from d1 as a, ch3.iclink as b
where a.permno=b.permno
order by a.permno, a.date;
quit;
proc sort data=d2 nodupkey; by ticker date;run;
**輸出個股盈餘宣告日前估計期月報酬率資料;
**(1) 產生 ticker*cyear 的資料集序號;
proc sort data=ch3.ibes_sp nodupkey; byticker cyear; run;(proc sort 排序)
data d4; set d3;
group=_n_;(
run;
(2) 將資料集序號與d3 資料集合併;
proc sql;
create table d5 as select distinct
a.*,b.group, b.anndats
fromd2 as a left join d4 as b
ona.ticker=b.ticker and a.cyear=b.cyear
orderby a.ticker, b.anndats;
quit;
(3)執行巨集程式, 產生估計期 (盈餘宣告日前1個月至60個)所需的個股及大盤月報酬率資料;
%macro subdata(finish, z=);
%Let gg=&z;
%Do %while (&gg<&finish);
data a≫ set d4;
if group=&gg then output;
run;
proc sql;
create table d6_g&gg as select
a.permno,a.ret, a.date, a.ret_mkt, a.ticker, b.group, b.anndats
fromd2 as a,a&gg as b
wherea.ticker=b.ticker and intnx('month', b.anndats, -61, 'E') <= intnx('month',a.date, 0, 'E') < intnx('month', b.anndats, -1, 'E')
orderby a.date;
quit;
data d6_g≫ setd6_g≫
ifret=. then delete;
ifret='.C' then delete;
run;
%Let gg=%eval(&gg+1);
%end;
%mend subdata;
***因為節省運算時間, 本例自此開始只選擇前100個成分股;
%subdata(858, z=1);
***CAPM巨集程式***;
%macro CAPM(finish, z=);
%Let group=&z;
%Do %while (&group<&finish);
proc reg data= d6_g&groupoutest=est_d&group edf noprint;
model ret=ret_mkt;
run;
quit;
data est_d&group; set est_d&group;
g=&group;
run;
%Let group=%eval(&group+1);
%end;
%mend CAPM;
%CAPM(858, z=1);
**資料集合併巨集;
%macro combine;
data d7;
set
%do i=1 %to 857;
est_d&i
%end;
;
run;
%mend;
%combine;
***合併以盈餘宣告日為事件日之 (-5, 5)期間的個股與市場日報酬率資料;
proc sql;
create table d8as select
a.*, b.ret_mkt as dret_mkt, year(a.anndats) as year
from ch3.ret_d as a left join ch3.retmkt_d as b
on (a.permno = b.permno) and a.date=b.date
orderby a.permno, a.date;
quit;
**合併 ICLINK 與日報酬資料檔, 產生 ticker 識別碼;
proc sql;
create table d9 as select
a.*,b.ticker
fromd8 as a, ch3.iclink as b
wherea.permno=b.permno
orderby b.ticker, a.date;
quit;
proc sql;
create table d10 as select distinct
a.ret_mktas beta, a.intercept as alpha, b.group, b.cyear, b.ticker
fromd7 as a left join d4 as b
ona.g=b.group
orderby b.ticker, b.cyear;
quit;
**計算 (-5, 5) 期間的未預期報酬;
proc sql;
create table d11 as select distinct
a.*, (b.alpha+b.beta*a.dret_mkt) as expret,
(a.ret-b.alpha-b.beta*a.dret_mkt)as ar
fromd9 as a left join d10 as b
ona.ticker=b.ticker and a.year=b.cyear
orderby a.ticker, a.anndats, a.date;
quit;
data d12; set d11;
if ar=. then delete;
run;
**計算好消息與壞消息兩子樣本的 (-5, 5) 期間平均未預期報酬;
data d13; set d12;
diff=date-anndats;
run;
**計算未預期盈餘=(實際盈餘-分析師預測盈餘);
proc sql;
create table d14 as select distinct
a.ar, a.permno, a.year, a.anndats, a.date, a.diff, b.fpedats,
b.feps_med, b.feps_mean, b.eps, (b.eps-b.feps_med) as ue1,
(b.eps-b.feps_mean) as ue2, b.ticker
from d13 as a left join ch3.ibes_sp as b
ona.ticker=b.ticker and a.anndats=b.anndats
order by a.ticker, a.anndats, a.diff;
quit;
**未預期盈餘>=0 為好消息樣本組, 否則為壞消息樣本組;
data d15; set d14;
if ue1 >=0 then d_ue1=1;
elsed_ue1=0;
if ue2 >=0 then d_ue2=1;
elsed_ue2=0;
ifar>=0 then d_ar=1;
elsed_ar=0;
run;
**分別計算好壞消息樣本公司之平均未預期報酬;
proc sql;
create table d16 as select
diff,d_ue2, mean(ar) as mar_mean
fromd15
groupby d_ue2, diff;
quit;
proc sql;
create table d17 as select
diff,mean(ar) as mar_mean
fromd15
groupbydiff;
quit;
/*
ods rtf file='d:\Sas Example\Sas Output\Ch3\AR.rtf';
proc print data=d16; run;
proc print data=d17; run;
ods rtf close;
*/
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
您可能感兴趣的文章
本站推荐的文章
人气文章
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。