全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2699 2
2016-03-13
悬赏 50 个论坛币 未解决

大家好,麻烦大家帮忙解决一下下面这个问题。就是前半部分是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 b  ona.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&gg; 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&gg; set  d6_g&gg;

   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 d8  as 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

    groupby  diff;

    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;

*/


二维码

扫码加我 拉你入群

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

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

全部回复
2016-3-14 21:06:49
这是沉下去了么?求高手呀!!!不用解释SAS语言的意思,就说d3和d2_1这两个文件怎么搞出来的。
谢谢谢谢谢谢!
二维码

扫码加我 拉你入群

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

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

2016-3-16 11:37:47
新手,顶一个,期待高手出现
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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