runflow.sas Tue Mar 19 18:19:54 2019 1 data mflinks; set mflinks.mflink1; where crsp_fundno is not missing; proc freq data=samp; tables flowvar_rank; proc sql; create table main as select a.wficn, a.startdate, b.crsp_fundno from samp as a, mflinks as b where a.wficn=b.wficn; data main(keep=wficn startdate i holdingdate crsp_fundno pdate ); format pdate holdingdate date9.; holdingdate=startdate; do i = 1 to 36; pdate=intnx( month, holdingdate+1, 1)-1; /* if intnx( month, mincrsp_fundnocaldt, 0)-1<=holdingdate<=intnx( month, maxc rsp_fundnocaldt, 0)-1 then output;*/ output; holdingdate=intnx( month, holdingdate+1, 1)-1; end; %stdprint(main); data flows; set sasdata.flows_mergeadjusted_monthly( rename=(date=pdate)); *At least one flow obs; data maindates maincrspfundnos(keep=wficn crsp_fundno); set main(keep=wficn crsp_fundno pdate); %nodupsort(maincrspfundnos); %stdmerge(flows,maindates, crsp_fundno pdate, maindates); proc sort data=maindates(keep=wficn) nodupkey; by wficn; %stdmerge(maindates, maincrspfundnos, wficn, maindates); %stdmerge(flows, maindates, crsp_fundno, flows); %kfhashmerge(main, flows, crsp_fundno pdate, flowval mtna lagmtna, main); data enderstna; set sasdata.enderstna; keep crsp_fundno end_dt merge_fundno end_dt_tna; %kfhashmerge(main, enderstna, crsp_fundno, end_dt merge_fundno end_dt_tna, main); format pdate end_dt date9.;
runflow.sas Tue Mar 19 18:19:54 2019 2 proc univariate; var lagmtna; proc freq; tables inflows; %stdprint(main); proc print; where pdate=end_dt and not(missing(merge_fundno)); title "Merged out"; title; if pdate=end_dt then do; if missing(merge_fundno) then flowval=sum(flowval,-end_dt_tna); /*Merged funds are assumed to keep it in the family*/ end; if pdate>end_dt and not(missing(end_dt)) then flowval=0; %countunique(main, wficn); proc sort data=main; proc means data=main nway noprint; var flowval lagmtna mtna; output out=main sum=flowval lagmtna mtna; if flowval=0 and missing(lagmtna) then percflow=0; else percflow=flowval/lagmtna; proc sort data=main; retain currentsumflow; if first.startdate then do; currentsumflow=flowval; end; else do; currentsumflow=sum(currentsumflow,flowval); end; proc print data=main; where wficn eq 410752;
runflow.sas Tue Mar 19 18:19:54 2019 3 title "Privet"; title; data terminal; if last.startdate; %stdprint(terminal); /* proc univariate data=terminal; where not(missing(end_dt)) and missing(merge_fundno); title "Dead funds which were not merged: expect negative currebstums"; var currentsumflow; proc univariate data=terminal; where not(missing(end_dt)) and not(missing(merge_fundno)); title "Dead funds which were merged, expect positive currentsums"; var currentsumflow; */ proc sort data=main; by wficn startdate; proc means data=main noprint; by wficn startdate; var mtna currentsumflow percflow flowval; output out=main(drop=_type freq_) mean=meanmtna meansumflow meanpercflow meanflow val n(flowval)=numflows; proc print; by wficn; where numflows<18; /* where numflows>=18;*/ proc freq; tables numflows; data overlap(rename=(importantdate=fldate)); set sasdata.overlapall(keep=wficn importantdate aratio_holding ratio_size); overlap=aratio_holding; %hashmerge(samp, overlap, wficn fldate, overlap, samp); where year(fldate)>=2000; %kfhashmerge(samp, main, wficn startdate,numflows meanmtna meanflowval meanpercflow mea nsumflow, samp); proc freq data=samp; tables inmain;
runflow.sas Tue Mar 19 18:19:54 2019 4 title "Initial samp has meanflowval?"; title; proc print data=samp; where not(inmain); title "No flow for these"; title; where inmain; proc means data=samp mean median; class flowvar_rank; var meanflowval; proc freq; tables numflows*flowvar_rank; proc npar1way data=samp wilcoxon median ; where flowvar_rank in (1,5); class flowvar_rank; var meanflowval; title "1 vs 5"; if flowvar_rank<5 then flowvar_rank=1; proc npar1way data=samp wilcoxon median ; where flowvar_rank in (1,5); class flowvar_rank; var meanflowval; title "All vs 5"; meanmtna_wins1=meanmtna; meanmtna_wins5=meanmtna; meanflowval_wins1=meanflowval; meanflowval_wins5=meanflowval; meanpercflow_wins1=meanpercflow; meanpercflow_wins5=meanpercflow; meansumflow_wins1=meansumflow; meansumflow_wins5=meansumflow; %trulywinsoral(samp, samp,fldate, meanmtna_wins1, 1); %trulywinsoral(samp, samp,fldate, meanmtna_wins5, 5); %trulywinsoral(samp, samp,fldate, meanflowval_wins1, 1); %trulywinsoral(samp, samp,fldate, meanflowval_wins5, 5); %trulywinsoral(samp, samp,fldate, meanpercflow_wins1, 1); %trulywinsoral(samp, samp,fldate, meanpercflow_wins5, 5);
runflow.sas Tue Mar 19 18:19:54 2019 5 %trulywinsoral(samp, samp,fldate, meansumflow_wins1, 1); %trulywinsoral(samp, samp,fldate, meansumflow_wins5, 5); proc rank data=samp out=samp groups=3; by fldate; var flowvar overlap ; ranks flowvar_3rank overlap_3rank ; proc sort data=samp; by flowvar_3rank overlap_3rank fldate; proc means data=samp noprint; by flowvar_3rank overlap_3rank ; var overlap meanflowval meanpercflow meansumflow; output out=samp_mns(drop=_type freq_) median=overlap meanflowval meanpercflow mea nsumflow; %comprint(samp_mns, For overlap proxied by aratio_holding: medians); proc means data=samp noprint; by flowvar_3rank overlap_3rank fldate; var overlap meanflowval meanflowval_wins1 meanflowval_wins5 meanpercflow meanperc flow_wins1 meanpercflow_wins5 meansumflow meansumflow_wins1 meansumflow_wins5; output out=samp_mns(drop=_type freq_) mean=overlap meanflowval meanflowval_wins1 meanflowval_wins5 meanpercflow meanpercflow_wins1 meanpercflow_wins5 meansumflow meansumflow_wins1 meansumflow_wins5; proc means data=samp_mns noprint; by flowvar_3rank overlap_3rank ; var overlap meanflowval meanflowval_wins1 meanflowval_wins5 meanpercflow meanperc flow_wins1 meanpercflow_wins5 meansumflow meansumflow_wins1 meansumflow_wins5; output out=samp_mns(drop=_type freq_) mean=overlap meanflowval meanflowval_wins1 meanflowval_wins5 meanpercflow meanpercflow_wins1 meanpercflow_wins5 meansumflow meansumflow_wins1 meansumflow_wins5; %comprint(samp_mns, For overlap proxied by aratio_holding: means); flowvardm=flowvar; overlapdm=overlap; proc standard data=samp out=samp mean=0; var flowvardm overlapdm; flowvarxoverlapdm=flowvardm*overlapdm; %doallitem(0 1 2, flowvar_3rank&item=(flowvar_3rank=&item); overlapxflowvar_3rank&item=overlap*flowvar_3rank&item; ); %stdprint(samp, check);
runflow.sas Tue Mar 19 18:19:54 2019 6 bom_fldate=intnx( month, fldate, 0)-1; data mgmtnames; set sasdata.mainlink_crspfamnames(keep=wficn mgmt_name rdate); where mgmt_name is not missing; %nodupsort(mgmtnames); data mgmtsizes; set sasdata.crspfamsizes(keep=mgmt_name rdate crspfamallsize crspfameqsize) ; %stdmerge(mgmtnames, mgmtsizes, mgmt_name rdate, mgmtsizes); %kfmergenoindic(samp, mgmtsizes, wficn rdate, samp); data fundassets(rename=(assets=fundsizeonrdate)); set sasdata.mainlink(keep=wficn rdate assets); where assets is not missing; %nodupsort(fundassets); %hashmerge(samp, fundassets, wficn rdate, fundsizeonrdate, samp); data exps; set sasdata.filledfees; keep wficn rdate exp_ratio; %nodupsort(exps); %stdmerge(samp, exps, wficn rdate, samp); /* where fundsizeonrdate/100>10; *At least 10 million;*/ crspfamallsize=coalesce(crspfamallsize, fundsizeonrdate/100); logsize=log(fundsizeonrdate/100); logcrspfamallsize=log(crspfamallsize); %stdprint(samp, almost done); data aggflow; set sasdata.aggregateflow(rename=(rankdate=fldate)); proc univariate; var aggregateflow12 aggregateflow36; %stdmerge(samp, aggflow, fldate, samp); %include pastflowsandreturns.sas ; %stdmerge(samp, dates_flows, wficn fldate, samp); %stdmerge(samp, dates_mrets, wficn fldate, samp); year=intnx( qtr, fldate+1, 0)-1; format year date9.;
runflow.sas Tue Mar 19 18:19:54 2019 7 %stdprint(samp, almost2 done); proc freq; tables year; %trulywinsoral(samp, samp,fldate, overlap, 1); %trulywinsoral(samp, samp,fldate, flowvar, 1); %trulywinsoral(samp, samp,fldate, flowvarxoverlapdm, 1); %trulywinsoral(samp, samp,fldate, overlapxflowvar_3rank0, 1); %trulywinsoral(samp, samp,fldate, overlapxflowvar_3rank1, 1); %trulywinsoral(samp, samp,fldate, overlapxflowvar_3rank2, 1); %trulywinsoral(samp, samp,fldate, logcrspfamallsize, 1); %trulywinsoral(samp, samp,fldate, logsize, 1); %trulywinsoral(samp, samp,fldate, exp_ratio, 1); %trulywinsoral(samp, samp,fldate, pastpercflow12, 1); %trulywinsoral(samp, samp,fldate, pastret12, 1); proc univariate; var meanflowval meanpercflow meansumflow; proc standard data=samp out=samp_std mean=0; by fldate; var meanmtna_wins1 meansumflow_wins1 meanpercflow_wins1 meanflowval_wins1 flowv ar overlap exp_ratio logsize logcrspfamallsize flowvarxoverlapdm overlapxflowvar_3rank0 overlapxflowvar_3rank1 overlapxflowvar_3rank2 flowva r_3rank1 flowvar_3rank2 pastret12 pastpercflow12; %macro surv(depvar,indepvars); proc surveyreg data=samp_std; cluster fldate; model &depvar= &indepvars/adjrsq; ods select ParameterEstimates FitStatistics; title "Main regressions &depvar"; %REG2DSE(y=&depvar, x= &indepvars, firm=wficn, time=fldate, multi=0, dataset=sa mp_std, output=results); proc print data=results; title "Main regressions (2-way clustered SE) &depvar"; %dsdel(results); %mend; %surv(meanmtna_wins1, flowvar overlap exp_ratio logsize logcrspfamallsize); %surv(meanmtna_wins1, flowvar overlap flowvarxoverlapdm exp_ratio logsize logcrspfa mallsize); %surv(meanmtna_wins1, flowvar overlapxflowvar_3rank0 overlapxflowvar_3rank1 overlap Xflowvar_3rank2 flowvar_3rank1 flowvar_3rank2 exp_ratio logsize logcrspfamallsize); %surv(meansumflow_wins1, flowvar overlap exp_ratio logsize logcrspfamallsize); %surv(meansumflow_wins1, flowvar overlap flowvarxoverlapdm exp_ratio logsize logcrs pfamallsize); %surv(meansumflow_wins1, flowvar overlapxflowvar_3rank0 overlapxflowvar_3rank1 over lapxflowvar_3rank2 flowvar_3rank1 flowvar_3rank2 exp_ratio logsize logcrspfamallsize);
runflow.sas Tue Mar 19 18:19:54 2019 8 %surv(meanflowval_wins1, flowvar overlap exp_ratio logsize logcrspfamallsize); %surv(meanflowval_wins1, flowvar overlap flowvarxoverlapdm exp_ratio logsize logcrs pfamallsize); %surv(meanflowval_wins1, flowvar overlapxflowvar_3rank0 overlapxflowvar_3rank1 over lapxflowvar_3rank2 flowvar_3rank1 flowvar_3rank2 exp_ratio logsize logcrspfamallsize); %surv(meanpercflow_wins1, flowvar overlap exp_ratio logsize logcrspfamallsize); %surv(meanpercflow_wins1, flowvar overlap flowvarxoverlapdm exp_ratio logsize logcr spfamallsize); %surv(meanpercflow_wins1, flowvar overlapxflowvar_3rank0 overlapxflowvar_3rank1 ove rlapxflowvar_3rank2 flowvar_3rank1 flowvar_3rank2 exp_ratio logsize logcrspfamallsize); %surv(meanpercflow_wins1, overlapxflowvar_3rank0 overlapxflowvar_3rank1 overlapxflo wvar_3rank2 flowvar_3rank1 flowvar_3rank2 exp_ratio logsize logcrspfamallsize); %surv(meanpercflow_wins1, pastpercflow12 pastret12 exp_ratio logsize logcrspfamalls ize); %surv(meanpercflow_wins1, flowvar overlap pastpercflow12 pastret12 exp_ratio logsiz e logcrspfamallsize); %surv(meanpercflow_wins1, flowvar overlap flowvarxoverlapdm pastpercflow12 pastret1 2 exp_ratio logsize logcrspfamallsize); %surv(meanpercflow_wins1, flowvar overlapxflowvar_3rank0 overlapxflowvar_3rank1 ove rlapxflowvar_3rank2 flowvar_3rank1 flowvar_3rank2 pastpercflow12 pastret12 exp_ratio lo gsize logcrspfamallsize); %surv(meanpercflow_wins1, overlapxflowvar_3rank0 overlapxflowvar_3rank1 overlapxflo wvar_3rank2 flowvar_3rank1 flowvar_3rank2 pastpercflow12 pastret12 exp_ratio logsize lo gcrspfamallsize);