Advertisement
Guest User

Untitled

a guest
Feb 16th, 2020
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SAS 4.76 KB | None | 0 0
  1. %let wrds = wrds.wharton.upenn.edu 4016;
  2. options comamid=TCP remote=WRDS;
  3. signon username=_prompt_;
  4.  
  5. rsubmit;
  6. options source nocenter ls=72 ps=max;
  7. libname comp        '/wrds/comp/sasdata/d_na';             
  8. libname crsp        ('/wrds/crsp/sasdata/a_ccm','/wrds/crsp/sasdata/a_stock','/wrds/crsp/sasdata/a_indexes');
  9.  
  10.  
  11.  
  12.  
  13.  
  14. data crsp;
  15.     set crsp.dsf;
  16.     if year(date)=1984;
  17.    
  18.  
  19. *remove duplicates;
  20. proc sort data = crsp
  21.     dupout = duplicates
  22.     noduprecs;  
  23. by permno;
  24.  
  25.  
  26. proc sql;
  27.     create table crsp1 as
  28.     select *,count(date) as count_date
  29.     from crsp
  30.     group by permno;
  31. quit;
  32.  
  33.  
  34. *delete observations if trading days less than 240;
  35. data crsp2; set crsp1;
  36.     if count_date <=240 then delete;
  37.  
  38.  
  39. proc sort data = crsp2; by permno date;
  40.  
  41.  
  42. data crsp2a; set crsp2;
  43.     cyear=year(date);
  44.  
  45.  
  46.  
  47. data crsp3; set crsp2a;
  48.     by permno;
  49.     lag_ret=lag(ret);
  50.     if first.permno then lag_ret=.;
  51.  
  52.  
  53.  
  54. data crsp4; set crsp3;
  55.     by permno;
  56.     if first.permno then x=1;
  57.     else x+1;
  58.  
  59.  
  60.  
  61. proc sort data=crsp4;
  62.     by permno descending x;
  63.  
  64.  
  65.  
  66. data crsp5; set crsp4;
  67.     by permno descending x;
  68.     l=lag(x);
  69.     lead_ret=lag(ret);
  70.     if first.permno then do;
  71.     l=.;
  72.     lead_ret=.;
  73.     end;
  74.  
  75.  
  76.  
  77. proc sort data=crsp5;
  78.     by permno x;
  79.  
  80.  
  81. data crsp6; set crsp5;
  82.     keep permno date cyear ret lag_ret lead_ret ;
  83.  
  84.  
  85.  
  86. proc sort data=crsp6; by permno date;
  87.  
  88.  
  89. data crsp7;set crsp6;
  90.     by permno cyear;
  91.     if first.permno then cumret1 = 1;
  92.     if missing(ret)=0 then cumret1 = cumret1 * (1+ret);
  93.         else cumret1 = cumret1;
  94.         cumret = cumret1 - 1;
  95.     retain cumret1;
  96.     label cumret = "Cumulative Annual Return";
  97.  
  98.  
  99.  
  100. data crsp7a; set crsp6;
  101.     by permno;
  102.     if first.permno then cumret1 = 1;
  103.     if missing(ret)=0 then cumret1 = cumret1 * (1+ret);
  104.         else cumret1 = cumret1;
  105.     cumret = cumret1 - 1;
  106.     retain cumret1;label cumret = "Cumulative Annual Return";
  107.     if last.permno then output;
  108.  
  109.  
  110. data crsp7b; set crsp7a;
  111.     annual_return=cumret;
  112.     drop cumret;
  113.  
  114.  
  115.  
  116.  
  117. proc sql;
  118. create table crsp8 as select a.*,b.annual_return from crsp7 as a left join crsp7b as b on a.permno=b.permno and a.cyear=b.cyear;
  119.  
  120.  
  121. proc sort data=crsp8; by permno date;
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.                    
  132. data comp;
  133.     set comp.fundq;
  134.     if indfmt='INDL' and datafmt='STD' and popsrc='D' and consol='C';
  135.    
  136.     if year(rdq)=1984;
  137.  
  138.  
  139. data comp1; set comp;
  140. cyear1=year(rdq);
  141.  
  142.  
  143.  
  144. proc sort data = comp1; by gvkey cik cusip cyear1 rdq;
  145.  
  146.  
  147.  
  148. proc sql;
  149.     create table comp2 as
  150.     select *,count(rdq) as count_rdq
  151.     from comp1
  152.     group by gvkey, cyear1;
  153. quit;
  154.  
  155. *delete observations if announcement windows not exactly 4;
  156. data comp3; set comp2;
  157.     if count_rdq ne 4 then delete;
  158.  
  159.  
  160.  
  161.  
  162. data comp4; set comp3;
  163. before=rdq-1;
  164. event=rdq;
  165. after=rdq+1;
  166.  
  167.  
  168.  
  169. data comp5; set comp4;
  170. format before yymmdd10.;
  171. format event yymmdd10.;
  172. format after yymmdd10.;
  173.  
  174.  
  175.  
  176. data comp6; set comp5;
  177. if year(before) ne cyear1 then delete;
  178. if year(after) ne cyear1 then delete;
  179.  
  180.  
  181.  
  182. proc sql;
  183.   create table merge1
  184.   as select distinct a.*, b.lpermno as permno,
  185.     case when b.linkprim = 'P' then 2 when b.linkprim = 'C' then 1 else 0 end as LinkScore
  186.   from comp6 as a, crsp.CCMXPF_LNKHIST as b
  187.     where a.gvkey = b.gvkey                        
  188.     and b.lpermno ne .
  189.     and b.LINKTYPE in ("LC", "LU", "LS", "LN")
  190.     and ((a.datadate >= b.LINKDT) or b.LINKDT = .B)
  191.     and ((a.datadate <= b.LINKENDDT) or b.LINKENDDT = .E)
  192.     group by a.gvkey, a.datadate
  193.   having LinkScore = max(LinkScore);
  194. quit;
  195.  
  196.  
  197.  
  198.  
  199. proc sql;
  200. create table merge2 as select a.*, b.date, b.ret, b.lag_ret, b.lead_ret, b.cumret, b.annual_return from merge1 as a left join crsp8 as b on a.permno= b.permno and a.rdq= b.date;
  201.  
  202.  
  203.  
  204. proc sort data = merge2; by permno rdq;
  205.  
  206.  
  207. proc sql;
  208.     create table merge3 as
  209.     select *,count(rdq) as count_rdq1
  210.     from merge2
  211.     group by permno, cyear1;
  212. quit;
  213.  
  214. *delete observations if announcement windows not exactly 4;
  215. data merge4; set merge3;
  216.     if count_rdq1 ne 4 then delete;
  217.  
  218.  
  219. proc sort data=merge4; by permno rdq;
  220.  
  221.  
  222. data merge5; set merge4;
  223. window_return=(1+lag_ret)*(1+ret)*(1+lead_ret)-1;
  224.  
  225.  
  226. data merge6; set merge5;
  227. by permno;
  228. if first.permno then x=1;else x+1;
  229.  
  230.  
  231. data merge7; set merge6;
  232. by permno;
  233.   if first.permno then do;
  234.     window1_return= .;
  235.     window2_return= .;
  236.     window3_return= .;
  237.     window4_return= .;
  238.   end;
  239.  
  240.   if x=1 then do;
  241.     window1_return=window_return;
  242.   end;
  243.  
  244.   if x=2 then do;
  245.     window2_return=window_return;
  246.   end;
  247.  
  248.   if x=3 then do;
  249.     window3_return=window_return;
  250.   end;
  251.  
  252.   if x=4 then do;
  253.     window4_return=window_return;
  254.   end;
  255.  
  256.   if last.permno then output;
  257.  
  258.   retain window1_return window2_return window3_return window4_return;
  259.  
  260. run;
  261.  
  262.  
  263. proc download data=merge7;
  264.  
  265.  
  266. data merge8; set merge7;
  267. proc reg data = merge8;
  268.     model annual_return = window1_return window2_return window3_return window4_return;
  269. run;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement