/* Replication Code of the paper "Country-Specific Euro Area Government Bond Yield Reactions to ECB's Non-Standard Monetary Policy Program Announcements" by Ralf Fendel and Frederik Neugebauer */ clear cls ************************************************************************************************************************* * (1) IMPORT DATA ************************************************************************************************************************* import excel "C:\Users\frederik.neugebauer\Desktop\replication files\panel data", sheet("Tabelle1") firstrow // please adopt to the directory where you saved the replication files ************************************************************************************************************************* * (2) PREPARE DATA ************************************************************************************************************************* egen Country1=group(country) // grouping of countries: asign a number to each country (Stata cannot work with string variables) xtset Country1 date,daily // declare time series as cross section data * generate dummy variable "all" taking the value of one on a day of a crucial announcement and zero otherwise * (overall 26 chosen events according to Table A1) gen all=0 replace all = 1 if /// date==td(20.07.2017)| /// repeated announcement APP date==td(08.06.2017)| /// repeated announcement APP date==td(27.04.2017)| /// repeated announcement APP date==td(19.01.2017)| /// APP details and reduction to 60 billion date==td(15.12.2016)| ///ABSPP date==td(08.12.2016)| ///PSPP, APP date==td(10.03.2016)| ///TLTRO II, CSPP date==td(03.12.2015)| /// repeated announcement APP date==td(22.01.2015)| ///ABSPP, CBPP3, TLTRO2 date==td(04.12.2014)| ///PSPP date==td(26.11.2014)| ///PSPP date==td(17.11.2014)| ///PSPP date==td(04.09.2014)| ///CBPP3,ABSPP date==td(05.06.2014)| ///ABSPP/TLTRO date==td(26.07.2012)| /// OMT1 date==td(02.08.2012)| /// OMT2 date==td(06.09.2012)| /// OMT3 date==td(08.12.2011)| ///LTRO date==td(06.10.2011)| ///CBPP2 date==td(08.08.2011)| ///SMP (announcement on 7th August 2011 but this was not a trading day) date==td(10.05.2010)| ///LTRO/SMP date==td(07.05.2009)| ///CBPP1/LTRO date==td(15.10.2008)| ///LTRO date==td(28.03.2008)| ///LTRO date==td(06.09.2007)| ///LTRO date==td(22.08.2007) //LTRO * create a lagged dummy to control for delayed effects gen all_lag1=all[_n-1] // note that the ordering is increasing, therefore a working day later is indicated with minus * differntiate dummies for the respective asset purchase programmes gen ABSPP=0 replace ABSPP = 1 if /// date==td(20.07.2017)| /// repeated announcement APP date==td(08.06.2017)| /// repeated announcement APP date==td(27.04.2017)| /// repeated announcement APP date==td(19.01.2017)| /// APP details and reduction to 60 billion date==td(15.12.2016)| ///ABSPP date==td(08.12.2016)| ///PSPP, APP date==td(03.12.2015)| /// repeated announcement APP date==td(22.01.2015)| ///ABSPP, CBPP3, TLTRO2 date==td(04.09.2014)| ///CBPP3,ABSPP date==td(05.06.2014) //ABSPP/TLTRO gen ABSPP_lag1=ABSPP[_n-1] gen CSPP=0 replace CSPP = 1 if /// date==td(20.07.2017)| /// repeated announcement APP date==td(08.06.2017)| /// repeated announcement APP date==td(27.04.2017)| /// repeated announcement APP date==td(19.01.2017)| /// APP details and reduction to 60 billion date==td(08.12.2016)| ///PSPP, APP date==td(10.03.2016)| ///TLTRO II, CSPP date==td(03.12.2015)| /// repeated announcement APP date==td(22.01.2015) //ABSPP, CBPP3, TLTRO2 gen CSPP_lag1=CSPP[_n-1] gen CBPP=0 replace CBPP = 1 if /// date==td(20.07.2017)| /// repeated announcement APP date==td(08.06.2017)| /// repeated announcement APP date==td(27.04.2017)| /// repeated announcement APP date==td(19.01.2017)| /// APP details and reduction to 60 billion date==td(08.12.2016)| ///PSPP, APP date==td(03.12.2015)| /// repeated announcement APP date==td(22.01.2015)| ///ABSPP, CBPP3, TLTRO2 date==td(04.09.2014)| ///CBPP3,ABSPP date==td(06.10.2011)| ///CBPP2 date==td(07.05.2009) //CBPP1/LTRO gen CBPP_lag1=CBPP[_n-1] gen PSPP=0 replace PSPP = 1 if /// date==td(20.07.2017)| /// repeated announcement APP date==td(08.06.2017)| /// repeated announcement APP date==td(27.04.2017)| /// repeated announcement APP date==td(19.01.2017)| /// APP details and reduction to 60 billion date==td(08.12.2016)| ///PSPP, APP date==td(03.12.2015)| /// repeated announcement APP date==td(22.01.2015)| ///ABSPP, CBPP3, TLTRO2 date==td(04.12.2014)| ///PSPP date==td(26.11.2014)| ///PSPP date==td(17.11.2014) //PSPP gen PSPP_lag1=PSPP[_n-1] gen LTRO=0 replace LTRO = 1 if /// date==td(10.03.2016)| ///TLTRO II, CSPP date==td(22.01.2015)| ///ABSPP, CBPP3, TLTRO2 date==td(05.06.2014)| ///ABSPP/TLTRO date==td(08.12.2011)| ///LTRO date==td(10.05.2010)| ///LTRO/SMP date==td(07.05.2009)| ///CBPP1/LTRO date==td(15.10.2008)| ///LTRO date==td(28.03.2008)| ///LTRO date==td(06.09.2007)| ///LTRO date==td(22.08.2007) //LTRO gen LTRO_lag1=LTRO[_n-1] gen SMP=0 replace SMP = 1 if /// date==td(08.08.2011)| ///SMP (eigentliche Ankündigung am 07.08.11) date==td(10.05.2010) //LTRO/SMP gen SMP_lag1=SMP[_n-1] gen OMT=0 replace OMT = 1 if /// date==td(26.07.2012)| /// OMT1 date==td(02.08.2012)| /// OMT2 date==td(06.09.2012) // OMT3 gen OMT_lag1=OMT[_n-1] gen OMT_ant1=OMT[_n+1] gen OMT_2w= OMT + OMT_lag1 // 2 day window gen OMT_2w_lag1= OMT_lag1 + OMT_lag1[_n-1] // 2 day window lag * build first differences by Country1: gen dyield = yield[_n]-yield[_n-1] // dependent variables by Country1: gen d2yield = dyield[_n-1] // lagged dependent variable by Country1: gen dstock = stock[_n]-stock[_n-1] // first control variable by Country1: gen dCESI = CESI[_n]-CESI[_n-1] // second control variable by Country1: gen future_rate = 100 - future_price by Country1: gen dfuture_rate = future_rate[_n]-future_rate[_n-1] // third control variable by Country1: gen dVIX_filled = VIX_filled[_n]-VIX_filled[_n-1] // forth control variable by Country1: gen dexchange = exchange[_n]-exchange[_n-1] // fifth control variable by Country1: gen dVSTOXX = VSTOXX[_n]-VSTOXX[_n-1] // alternative control * interpolate US yields with the value of the day before by Country1: replace US_10y_forward = US_10y_forward[_n-1] if US_10y_forward >=. by Country1: gen dUS_10y_forward = US_10y_forward[_n]-US_10y_forward[_n-1] xtsum yield stock CESI exchange dyield dstock dCESI dexchange dfuture_rate // summary of used variables: important to control if data is complete and no errors appear in the raw data excel file xtdescribe // description of data set ************************************************************************************************************************* * (3) REGRESSION ANALYSIS ************************************************************************************************************************* * Table 4: Panel Regression one-day delayed effects * (A) columns 1 and 2: 11 aggregated countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward all_lag1, fe vce(robust) outreg2 using output, excel nose replace label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP_lag1 CSPP_lag1 CBPP_lag1 PSPP_lag1 LTRO_lag1 SMP_lag1 OMT_lag1, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * (B) columns 3 and 4: 6 core countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward all_lag1 if Country1==1 | Country1==2 | Country1==3 | Country1==5 | Country1==6 | Country1==10, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP_lag1 CSPP_lag1 CBPP_lag1 PSPP_lag1 LTRO_lag1 SMP_lag1 OMT_lag1 if Country1==1 | Country1==2 | Country1==3 | Country1==5 | Country1==6 | Country1==10, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * (C) columns 5 and 6: 5 periphery countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward all_lag1 if Country1==4 | Country1==7 | Country1==8 | Country1==9 | Country1==11, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP_lag1 CSPP_lag1 CBPP_lag1 PSPP_lag1 LTRO_lag1 SMP_lag1 OMT_lag1 if Country1==4 | Country1==7 | Country1==8 | Country1==9 | Country1==11, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * Table 5: Panel Regression one-day delayed effects: inclusion of spread interaction * calculate interaction terms with spreads by Country1: gen spread = yield-Euro_Swap by Country1: gen int_lag=all_lag1*spread by Country1: gen ABSPP_int=ABSPP_lag1*spread by Country1: gen CSPP_int=CSPP_lag1*spread by Country1: gen CBPP_int=CBPP_lag1*spread by Country1: gen PSPP_int=PSPP_lag1*spread by Country1: gen LTRO_int=LTRO_lag1*spread by Country1: gen SMP_int=SMP_lag1*spread by Country1: gen OMT_int=OMT_lag1*spread * (A) column 1: 11 aggregated countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward all_lag1 int_lag, fe vce(robust) outreg2 using output, excel nose replace label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP_lag1 CSPP_lag1 CBPP_lag1 PSPP_lag1 LTRO_lag1 SMP_lag1 OMT_lag1 ABSPP_int CSPP_int CBPP_int PSPP_int LTRO_int SMP_int OMT_int, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * (B) column 2: 6 core countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward all_lag1 int_lag if Country1==1 | Country1==2 | Country1==3 | Country1==5 | Country1==6 | Country1==10, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP_lag1 CSPP_lag1 CBPP_lag1 PSPP_lag1 LTRO_lag1 SMP_lag1 OMT_lag1 ABSPP_int CSPP_int CBPP_int PSPP_int LTRO_int SMP_int OMT_int if Country1==1 | Country1==2 | Country1==3 | Country1==5 | Country1==6 | Country1==10, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * (C) column 3: periphery countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward all_lag1 int_lag if Country1==4 | Country1==7 | Country1==8 | Country1==9 | Country1==11, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP_lag1 CSPP_lag1 CBPP_lag1 PSPP_lag1 LTRO_lag1 SMP_lag1 OMT_lag1 ABSPP_int CSPP_int CBPP_int PSPP_int LTRO_int SMP_int OMT_int if Country1==4 | Country1==7 | Country1==8 | Country1==9 | Country1==11, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formattin9 * Table 6: Effect of single announcements (panel part) * creating one dummy per event, 26 dummies taking the value of 1 one day after a crucial announcement takes place gen A = 0 replace A = 1 if date==td(21.07.2017) gen B = 0 replace B = 1 if date==td(09.06.2017) gen C = 0 replace C = 1 if date==td(28.04.2017) gen D = 0 replace D = 1 if date==td(20.01.2017) gen E = 0 replace E = 1 if date==td(16.12.2016) gen F = 0 replace F = 1 if date==td(09.12.2016) gen G = 0 replace G = 1 if date==td(11.03.2016) gen H = 0 replace H = 1 if date==td(04.12.2015) gen I = 0 replace I = 1 if date==td(23.01.2015) gen J = 0 replace J = 1 if date==td(05.12.2014) gen K = 0 replace K = 1 if date==td(27.11.2014) gen L = 0 replace L = 1 if date==td(18.11.2014) gen M = 0 replace M = 1 if date==td(05.09.2014) gen N = 0 replace N = 1 if date==td(06.06.2014) gen O = 0 replace O = 1 if date==td(07.09.2012) gen P = 0 replace P = 1 if date==td(03.08.2012) gen Q = 0 replace Q = 1 if date==td(27.07.2012) gen R = 0 replace R = 1 if date==td(09.12.2011) gen S = 0 replace S = 1 if date==td(07.10.2011) gen T = 0 replace T = 1 if date==td(09.08.2011) gen U = 0 replace U = 1 if date==td(11.05.2010) gen V = 0 replace V = 1 if date==td(08.05.2009) gen W = 0 replace W = 1 if date==td(16.10.2008) gen X = 0 replace X = 1 if date==td(31.03.2008) gen Y = 0 replace Y = 1 if date==td(07.09.2007) gen Z = 0 replace Z = 1 if date==td(23.08.2007) * (A) columns 1 and 2: 11 aggregated countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward A B C D E F G H I J K L M N O P Q R S T U V W X Y Z, fe vce(robust) outreg2 using output, excel nose replace label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP_lag1 CSPP_lag1 CBPP_lag1 PSPP_lag1 LTRO_lag1 SMP_lag1 OMT_lag1, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * (B) columns 3 and 4: 6 core countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward A B C D E F G H I J K L M N O P Q R S T U V W X Y Z if Country1==1 | Country1==2 | Country1==3 | Country1==5 | Country1==6 | Country1==10, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP_lag1 CSPP_lag1 CBPP_lag1 PSPP_lag1 LTRO_lag1 SMP_lag1 OMT_lag1 if Country1==1 | Country1==2 | Country1==3 | Country1==5 | Country1==6 | Country1==10, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * (C) columns 5 and 6: 5 periphery countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward A B C D E F G H I J K L M N O P Q R S T U V W X Y Z if Country1==4 | Country1==7 | Country1==8 | Country1==9 | Country1==11, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP_lag1 CSPP_lag1 CBPP_lag1 PSPP_lag1 LTRO_lag1 SMP_lag1 OMT_lag1 if Country1==4 | Country1==7 | Country1==8 | Country1==9 | Country1==11, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * Table A5: Panel Regression immediate effects * (A) columns 1 and 2: 11 aggregated countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward all, fe vce(robust) outreg2 using output, excel nose replace label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP CSPP CBPP PSPP LTRO SMP OMT, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * (B) columns 3 and 4: 6 core countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward all if Country1==1 | Country1==2 | Country1==3 | Country1==5 | Country1==6 | Country1==10, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP CSPP CBPP PSPP LTRO SMP OMT if Country1==1 | Country1==2 | Country1==3 | Country1==5 | Country1==6 | Country1==10, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * (C) columns 5 and 6: 5 periphery countries * overall effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward all if Country1==4 | Country1==7 | Country1==8 | Country1==9 | Country1==11, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting * program-specific effect quietly xtreg dyield d2yield dstock dfuture_rate dCESI dVIX_filled dexchange dUS_10y_forward ABSPP CSPP CBPP PSPP LTRO SMP OMT if Country1==4 | Country1==7 | Country1==8 | Country1==9 | Country1==11, fe vce(robust) outreg2 using output, excel nose append label // alternatively replace excel with tex/word for final formatting