/* Dataset build for the paper "The Opportunity Costs of Mandatory Military Service: Evidence from a Draft Lottery" */ 

#delimit;
set more 1;
prog drop _all;


*read in military data;
use "forsk_vpl.dta", clear;
gen psyear=real(substr(spaer,1,4));
gen psmonth=real(substr(spaer,5,2));
gen afdyear=real(substr(sessan,1,4));
gen shy=real(substr(sessan,5,1));
gen lot=real(lodnr);
rename sessionsproeve afqt;
rename hoejde height;
gen served=(moedekode!="" & psyear!=.);
keep if (lot>0 & lot<=36000);
keep if (psyear>=1994 & psyear<=2007);
drop if (psyear<afdyear);
keep if (psmonth>=1 & psmonth<=12);
keep if afdyear>=1994 & afdyear<=2007;
keep pnr height afqt lot served psyear psmonth afdyear evtkode shy;
save mil, replace;

*read in population admin. data;
use pnr mor_id far_id birthweight foeddato ie_type koen bef* using "X:\Data\Workdata\706942\data\Population\population_perm8017", clear;
joinby pnr using mil;
keep if koen==1;
keep if ie_type!=.;
gen yob=year(foeddato);
keep if (yob>=1976 & yob<=1983);

gen psage=psyear-yob;
drop bef*;
rename mor_id pnrm;
rename far_id pnrf;

save temp1, replace;
rename pnr pnrk;
keep pnrk pnrm pnrf;
save temppnr, replace;

*disposable income;
for Z in num 1986/2009 \ R in num 3636 3782 3953 4142 4251 4353 4445 4500 4590 4686 4785 4890 4980 5104 5253 5377 5507 5622 5687 5790 5900 6001 6205 6287:
  display "year " Z " index " R
\ use pnr alder kom bopikom using "befZ", clear
\ joinby pnr using "indZ", unmatched(master)
\ keep pnr alder kom bopikom DISPON_NY
\ egen disp=sum(DISPON_NY), by(kom bopikom)
\ gen byte child=alder<18
\ gen byte adult=alder>=18
\ egen nadult=sum(adult), by(kom bopikom)
\ egen nchild=sum(child), by(kom bopikom)
\ keep if alder==15
\ recode nadult min/1=1 10/max=10
\ recode nchild min/1=1 10/max=10
\ replace disp=disp/R*6768
\ gen etdisp=disp/(1+(nadult-1)*0.7+nchild*0.5)
\ recode etdisp min/0=0 2000000/max=2000000
\ keep pnr etdisp nadult
\ save etdispZ, replace;
clear;
for Z in num 1986/2009: append using etdispZ;
duplicates drop pnr, force;
save etdisp, replace;


*earnings and bank accounts;
use pnrk using temppnr, clear;
rename pnrk pnr;
for Y in num 1995/2011 \ P in num 4686 4785 4890 4980 5104 5253 5377 5507 5622 5687 5790 5900 6001 6205 6287 6432 6609:
  display "year " Y " index " P
\ joinby pnr using "indY", unmatched(master)
\ gen bnkY=(bankakt-bankgaeld)/P*6768
\ gen earnY=loenmv/P*6768
\ recode earnY min/0=0 2000000/max=2000000
\ recode bnkY min/-1000000=-1000000 1000000/max=1000000
\ keep pnr earn* bnk*
\ save eb, replace;


use temp1, clear;
joinby pnr using eb, unmatched(master);
for A in num 17/35: for N in any bnk earn: gen NA=.;
for A in num 17/35: for N in any bnk earn: for Y in num 1995/2011: replace NA=NY if A==(Y-yob);
keep pnr bnk17-bnk35 earn17-earn35;
renpfix bnk bank;
order pnr earn* bank*;
save bankearn, replace;


*earnings on the job;
for Y in num 1995/2011 \ R in num 4686 4785 4890 4980 5104 5253 5377 5507 5622 5687 5790 5900 6001 6205 6287 6432 6609:
  display "year " Y " index " R
\ use pnr ansdage joblon using "idanY", clear
\ collapse (sum) kearn=joblon days=ansdage, by(pnr)
\ recode days min/0=0 366/max=366
\ replace kearn=kearn/R*6768
\ recode kearn min/0=0 2000000/max=2000000
\ compress
\ save idaworkY, replace;

use temp1, clear;
for Y in num 1995/2011:
  joinby pnr using idaworkY, unmatched(master)
\ rename kearn kearnY
\ rename days daysY
\ keep pnr yob kearn* days*;
for A in num 17/35: for N in any days kearn: gen NA=.;
for A in num 17/35: for N in any days kearn: for Y in num 1995/2011: replace NA=NY if A==(Y-yob);
keep pnr days17-days35 kearn17-kearn35;
order pnr kearn* days*;
compress;
save kearndays, replace;


*education;
clear;
for Y in num 1981/2017: append using "X:\Data\Workdata\706942\data\Uddannelse\_uddY", keep(pnr aar hfaudd igudd);
rename hfaudd hfudd_kode;
joinby hfudd_kode using "X:\Data\Workdata\706942\data\Uddannelse\_uddan_hfpria.dta";
rename hfpria em;
rename aar year;
keep pnr year em igudd;
rename igudd hfudd_kode;
joinby hfudd_kode using "X:\Data\Workdata\706942\data\Uddannelse\_uddan_hfpria.dta", unmatched(master);
rename hfpria ineduc;
keep pnr year em ineduc;
save tempedu, replace;


prog define wideeduc;
use temppnr, clear;
rename pnr`1' pnr;
keep pnr;
duplicates drop;
joinby pnr using tempedu;
keep pnr year em;
reshape wide em, i(pnr) j(year);
renpfix em `1'em;
rename pnr pnr`1';
save tempedu`1', replace;
end;

for Y in any k m f: wideeduc Y;


use pnrk using temppnr, clear;
rename pnrk pnr;
joinby pnr using tempedu;
keep pnr year ineduc;
reshape wide ineduc, i(pnr) j(year);
save tempineduc, replace;

use temp1, clear;
joinby pnr using tempineduc;
for A in num 25/35: gen aineducA=ineduc1981; 
for A in num 25/35: for Y in num 1982/2013:
  replace aineducA=ineducY if (Y-yob)==A;
keep pnr aineduc*;
compress;
save aineduc, replace;


*unemployment;
use pnrk using temppnr, clear;
rename pnrk pnr;
for Y in num 1990/2007:
  joinby pnr using "idapY", unmatched(master)
\ rename arledgr unempY
\ recode unempY min/0=0 1000/max=1000
\ keep pnr unemp*
\ save unem, replace;


use temp1, clear;
joinby pnr using unem, unmatched(master);
for A in num 17/35: gen unempA=.;
for A in num 17/35: for Y in num 1990/2007: replace unempA=unempY if A==(Y-yob);
keep pnr unemp17-unemp35;
save unemp, replace;


*hospitalization;
use pnrk using temppnr, clear;
rename pnrk pnr;
for Y in num 1990/2011:
  joinby pnr using "lpradmY", unmatched(master)
\ duplicates drop pnr, force
\ gen inlprY=_merge==3
\ keep pnr inlpr*
\ save inlp, replace;

use temp1, clear;
joinby pnr using inlp, unmatched(master);
for A in num 17/35: gen inlprA=.;
for A in num 17/35: for Y in num 1990/2011: replace inlprA=inlprY if A==(Y-yob);
keep pnr inlpr17-inlpr35;
save inlpr, replace;


*medication;
for Y in num 1995/2013:
  use "lmdb_Y", clear
\ gen psymeds=1 if atc3 == "N05A"| atc3 == "N05B" | atc3 == "N05C"| atc3 == "N06A" | atc3 == "N06B" | atc4 == "N07BB"
\ collapse (count) psymeds, by(pnr)
\ joinby pnr using temp1, unmatched(using)
\ rename psymeds psymedY
\ keep pnr psymedY
\ save psymedsY, replace;

use temp1, clear;
for Y in num 1995/2013: 
  joinby pnr using psymedsY, unmatched(master)
\ keep pnr yob psymed*;
for A in num 17/35: gen psymedsA=.;
for A in num 17/35: for Y in num 1995/2013: replace psymedsA=psymedY if A==(Y-yob);
keep pnr psymeds17-psymeds35;
save psymeds, replace;


*psychiatry;
use pnr d_inddto using "lpsyadm2016", clear;
gen year=year(d_inddto);
keep pnr year;
duplicates drop pnr year, force;
gen pd=1;
joinby pnr using temp1;
keep pnr year pd;
reshape wide pd, i(pnr) j(year);
joinby pnr using temp1, unmatched(using);
for A in num 17/35: gen psydiagA=.;
for A in num 17/35: for Y in num 1995/2013: replace psydiagA=pdY if A==(Y-yob);
keep pnr psydiag17-psydiag35;
save psydiag, replace;


*addiction treatment;
use pnr d_inddto using "addiction2016", clear;
gen year=year(d_inddto);
keep pnr year;
duplicates drop pnr year, force;
gen pd=1;
joinby pnr using temp1;
keep pnr year pd;
reshape wide pd, i(pnr) j(year);
joinby pnr using temp1, unmatched(using);
for A in num 17/35: gen addictionA=.;
for A in num 17/35: for Y in num 1995/2013: replace addictionA=pdY if A==(Y-yob);
keep pnr addiction17-addiction35;
save addiction, replace;


*crime;
clear;
for Y in num 1991/2013: append using "krafY",  keep(AFG_AFGOEDTO AFG_GER7 pnr);
drop if AFG_GER7>=2000000 & AFG_GER7<=2999999;
gen year=year(AFG_AFGOEDTO);
keep pnr year;
duplicates drop pnr year, force;

gen cr=1;
joinby pnr using temp1;
keep pnr year cr;
reshape wide cr, i(pnr) j(year);
joinby pnr using temp1, unmatched(using);
for A in num 17/35: gen crimeA=.;
for A in num 17/35: for Y in num 1991/2013: replace crimeA=crY if A==(Y-yob);
keep pnr crime17-crime35;
save crime, replace;


*out of home care;
use "bua2015", clear;
destring pgf, replace; 
recode pgf (100 110 120 130 140 150 160 170 180 199 346 = 1);
keep if pgf==1;
keep pnr;
duplicates drop;
gen outofhomecare=1;
save outofhomecare, replace;


*join everything together;
use temp1, clear;
rename pnr pnrk;
for P in any m f k: 
  joinby pnrP using tempeduP, unmatched(master) _merge(merP)
\ gen Peduc=7*12;

for P in any m f: for Y in num 1981/2013: replace Peduc=PemY if Y-yob<16 & Peduc<PemY;
for A in num 25/30: 
  gen educkA=9*12
\ for Y in num 1981/2013: replace educkA=kemY if Y-yob==A & kemY>educkA;

drop mem* fem* kem* mer* keduc;
rename pnrk pnr;
for X in any aineduc etdisp bankearn kearndays unemp inlpr psymeds psydiag crime outofhomecare addiction:
  joinby pnr using X, unmatched(master)
\ drop _merge;

compress;
save everythingsofar, replace;


use everythingsofar, clear;
rename afdyear sessan_year;
rename psyear spaer_year;
rename psmonth spaer_month;
rename lot lotterydraw;
gen mob=month(foeddato);
rename bank17 beforebank;
rename bank26 afterbank;
rename unemp17 beforeunemp;
rename unemp26 afterunemp;
renpfix inlpr lpr;
renpfix psymeds medicine;
renpfix psydiag psykdiag;
for X in any crime psykdiag medicine lpr addiction: gen beforeX=X17 \ gen afterX=0 \ recode beforeX .=0;
for X in any crime psykdiag medicine lpr addiction: for A in num 25/30: replace afterX=1 if XA>0 & XA!=.;  
gen serviceage=spaer_year-yob;
gen dane=ie_type==1;
gen immigrant=1-dane;
gen singleparentfamily=nadult==1;

*draft lottery cut-offs;
gen freshold=0;
replace freshold= 21000 if (spaer_year==1994 & spaer_month<7);
replace freshold= 9000 if (spaer_year==1994 & spaer_month>6);
replace freshold= 21000 if (spaer_year==1995 & spaer_month<7);
replace freshold= 9000 if (spaer_year==1995 & spaer_month>6);
replace freshold= 25000 if (spaer_year==1996 & spaer_month<7);
replace freshold= 12000 if (spaer_year==1996 & spaer_month>6);
replace freshold= 25000 if (spaer_year==1997 & spaer_month<7);
replace freshold= 15000 if (spaer_year==1997 & spaer_month>6);
replace freshold= 24000 if (spaer_year==1998 & spaer_month<7);
replace freshold= 13000 if (spaer_year==1998 & spaer_month>6);
replace freshold= 24000 if (spaer_year==1999 & spaer_month<7);
replace freshold= 15000 if (spaer_year==1999 & spaer_month>6);
replace freshold= 8000 if (spaer_year==2000 & spaer_month<7);
replace freshold= 3000 if (spaer_year==2000 & spaer_month>6);
replace freshold= 18000 if (spaer_year==2001 & spaer_month<7);
replace freshold= 15000 if (spaer_year==2001 & spaer_month>6);
replace freshold= 26000 if (spaer_year==2002 & spaer_month<7);
replace freshold= 16000 if (spaer_year==2002 & spaer_month>6);
replace freshold= 36000 if (spaer_year==2003 & spaer_month<7);
replace freshold= 12000 if (spaer_year==2003 & spaer_month>6);
replace freshold= 31000 if (spaer_year==2004 & spaer_month<7);
replace freshold= 8000 if (spaer_year==2004 & spaer_month>6);
replace freshold= 27000 if (spaer_year==2005 & spaer_month<7);
replace freshold= 8000 if (spaer_year==2005 & spaer_month>6);
replace freshold= 18000 if (spaer_year==2006 & spaer_month<7);
replace freshold= 4000 if (spaer_year==2006 & spaer_month>6);
replace freshold= 15000 if (spaer_year==2007 & spaer_month<7);
replace freshold= 1600 if (spaer_year==2007 & spaer_month>6);
gen drawlo=lotterydraw<freshold;


keep pnr aineduc25 aineduc28 aineduc30 educk25 educk26 educk27 educk28 educk29 educk30 feduc meduc 
  beforelpr beforemedicine beforepsykdiag beforeaddiction beforeunemp beforebank beforecrime
  afterlpr aftermedicine afterpsykdiag afteraddiction afterunemp afterbank aftercrime
  etdisp mob yob birthweight dane immigrant 
  outofhomecare singleparentfamily
  spaer_year spaer_month sessan_year afqt height lotterydraw served serviceage shy drawlo
  earn17-earn35 kearn17-kearn35 days17-days35;
duplicates drop pnr, force;
save ocwide, replace;
keep pnr earn* kearn* days*;
reshape long earn kearn days, i(pnr) j(age);
joinby pnr using ocwide;
drop earn17-earn35 kearn17-kearn35 days17-days35;
gen year=yob+age;
gen learn=log(earn);
drop earn;

save opp-cost-master, replace;



