options ls=120 nocenter;
libname corpfin '/projects/nwu/pledesma/corpfin';
filename ritter '/projects/nwu/pledesma/corpfin/raw/Baker_and_Wurgler_RitterIPOlist.txt';
filename sdc '/projects/nwu/pledesma/corpfin/raw/Baker_and_Wurgler_SDC_IPOlist.txt';
data ritterlist;
infile ritter;
input cusip $ tdate $;
date=input(tdate,yymmdd.);
format date yymmddn8.;
drop tdate;
data sdclist;
infile sdc;
input cusip $ tdate $;
date=input(tdate,yymmdd.);
format date yymmddn8.;
drop tdate;
proc sort data=sdclist nodupkey;
by cusip date;
proc sql;
create table rittermatch as select
ritterlist.
quit;
proc sort data=rittermatch nodupkey;
by cusip permno;
proc sort data=rittermatch;
by descending numday;
proc sql;
create table sdcmatch as select
sdclist.
quit;
proc sort data=sdcmatch nodupkey;
by cusip permno date;
proc sql;
create table rittermatch as select
rittermatch.
quit;
proc sql;
create table sdcmatch as select
sdcmatch.
quit;
proc sort data=rittermatch; by permno date;
proc sort data=sdcmatch; by permno date;
data sdcadds2ritter;
merge rittermatch (in=a) sdcmatch (in=b);
by permno;
if b and not a;
proc append base=rittermatch data=sdcadds2ritter;
proc sort data=rittermatch nodupkey;
by permno gvkey date;
proc freq data=rittermatch noprint; tables gvkey / out=gvkeycounts;
proc freq data=rittermatch noprint; tables permno / out=permcounts;
data repeatedgvkeys (rename=(count=gvkeycount));
set gvkeycounts;
where count>1;
data repeatedperms (rename=(count=permcount));
set permcounts;
where count>1;
proc sort data=rittermatch; by gvkey;
data t1;
merge rittermatch repeatedgvkeys (in=a);
by gvkey;
if not a then delete;
proc sort data=rittermatch; by permno;
data t2;
merge rittermatch repeatedperms (in=a);
by permno;
if not a then delete;
data rittermatch; set rittermatch; where year(date) between 1968 and 1998;
proc sort data=rittermatch nodupkey; by gvkey date;
proc sql;
create table t3 as select
rittermatch.
quit;
proc sort data=t3; by gvkey yeara;
data st_cstat (keep=gvkey yeara) end_cstat (keep=gvkey yeara);
set t3;
by gvkey yeara;
if first.gvkey then output st_cstat;
if last.gvkey then output end_cstat;
data corpfin.bakerwurgler;
merge rittermatch st_cstat (rename=(yeara=st_cstat)) end_cstat (rename=(yeara=end_cstat));
by gvkey;
numyrs=st_cstat-year(date);
if st_cstat=. then delete;
proc sql;
create table temp as select
rittermatch.
quit;
proc sort data=temp; by gvkey yeara;
data assets;
set temp;
where data6 ne .;
data st_assets (keep=gvkey yeara) end_assets (keep=gvkey yeara);
set assets;
by gvkey yeara;
if first.gvkey then output st_assets;
if last.gvkey then output end_assets;
data mkval;
set temp;
where mkval ne .;
data st_mkval (keep=gvkey yeara) end_mkval (keep=gvkey yeara);
set mkval;
by gvkey yeara;
if first.gvkey then output st_mkval;
if last.gvkey then output end_mkval;
data corpfin.bakerwurgler2;
merge rittermatch (in=a) st_assets (in=b rename=(yeara=st_assets)) end_assets (in=c rename=(yeara=end_assets))
st_mkval (in=d rename=(yeara=st_mkval)) end_mkval (in=e rename=(yeara=end_mkval));
by gvkey;
if a and b and c and d and e;
yrsmkval=end_mkval-st_mkval+1;
yrsassets=end_assets-st_assets+1;
numyrs=st_mkval-year(date);
label
st_assets="Year Total Assets series starts"
end_assets="Year Total Assets series ends"
st_mkval="Year Market Value series starts"
end_mkval="Year Market Value series ends"
yrsmkval="Number of years Market Value should be available"
yrsassets="Number of years Total Assets should be available"
cusip="CUSIP number"
date="IPO date"
numday="Number of days after IPO date to appear in CRSP"
numyrs="Number of years after IPO year to appear in Compustat";
proc contents data=corpfin.bakerwurgler2;
data corpfin.ipolist;
set corpfin.bakerwurgler (keep=gvkey date);
run;
proc export data=corpfin.bakerwurgler
outfile="/projects/nwu/pledesma/corpfin/raw/bakerwurgler.csv"
dbms=csv replace;
proc export data=corpfin.bakerwurgler2
outfile="/projects/nwu/pledesma/corpfin/raw/bakerwurgler2.csv"
dbms=csv replace;
proc freq data=corpfin.bakerwurgler2 noprint;
tables gvkey / out=gvkeycounts;
data gvkeycounts; set gvkeycounts; where count > 1;
data gvkeycounts;
merge corpfin.bakerwurgler gvkeycounts (in=a);
by gvkey;
if not a then delete;
proc print data=gvkeycounts noobs;
var gvkey permno cusip comnam date st_date st_cstat;
proc freq data=corpfin.bakerwurgler2;
tables numyrs;
endsas;
proc sql;
create table rittermatch as select
ritterlist.
quit;