* LIV_actuals_xls_p_08May.prg on 5/14/2008 * Get Alternative Real-Time Data for GDP Inflation * Need 5 quarter actuals, not 4 * Calculate Growth Rates * Fill holes * Construct actuals * Write actuals to Excel file * May 2008 change: annualize the inflation rate, don't do 5 quarters! ***************************************************************************** * * * Notes: * * * * * * * * * ***************************************************************************** cal 1947 1 4 alloc 0 2010:4 * set some parameters * send = last observation date in last vintage * vend = date of last vintage * vtot = number of vintages compute send = 2007:4 compute vend = send + 1 compute vtot = 170 open data c:\data\RTDSM_p.xls data(format=xls,org=obs) 1947:1 send $ P65Q4 $ P66Q1 P66Q2 P66Q3 P66Q4 $ P67Q1 P67Q2 P67Q3 P67Q4 $ P68Q1 P68Q2 P68Q3 P68Q4 $ P69Q1 P69Q2 P69Q3 P69Q4 $ P70Q1 P70Q2 P70Q3 P70Q4 $ P71Q1 P71Q2 P71Q3 P71Q4 $ P72Q1 P72Q2 P72Q3 P72Q4 $ P73Q1 P73Q2 P73Q3 P73Q4 $ P74Q1 P74Q2 P74Q3 P74Q4 $ P75Q1 P75Q2 P75Q3 P75Q4 $ P76Q1 P76Q2 P76Q3 P76Q4 $ P77Q1 P77Q2 P77Q3 P77Q4 $ P78Q1 P78Q2 P78Q3 P78Q4 $ P79Q1 P79Q2 P79Q3 P79Q4 $ P80Q1 P80Q2 P80Q3 P80Q4 $ P81Q1 P81Q2 P81Q3 P81Q4 $ P82Q1 P82Q2 P82Q3 P82Q4 $ P83Q1 P83Q2 P83Q3 P83Q4 $ P84Q1 P84Q2 P84Q3 P84Q4 $ P85Q1 P85Q2 P85Q3 P85Q4 $ P86Q1 P86Q2 P86Q3 P86Q4 $ P87Q1 P87Q2 P87Q3 P87Q4 $ P88Q1 P88Q2 P88Q3 P88Q4 $ P89Q1 P89Q2 P89Q3 P89Q4 $ P90Q1 P90Q2 P90Q3 P90Q4 $ P91Q1 P91Q2 P91Q3 P91Q4 $ P92Q1 P92Q2 P92Q3 P92Q4 $ P93Q1 P93Q2 P93Q3 P93Q4 $ P94Q1 P94Q2 P94Q3 P94Q4 $ P95Q1 P95Q2 P95Q3 P95Q4 $ P96Q1 P96Q2 P96Q3 P96Q4 $ P97Q1 P97Q2 P97Q3 P97Q4 $ P98Q1 P98Q2 P98Q3 P98Q4 $ P99Q1 P99Q2 P99Q3 P99Q4 $ P00Q1 P00Q2 P00Q3 P00Q4 $ P01Q1 P01Q2 P01Q3 P01Q4 $ P02Q1 P02Q2 P02Q3 P02Q4 $ P03Q1 P03Q2 P03Q3 P03Q4 $ P04Q1 P04Q2 P04Q3 P04Q4 $ P05Q1 P05Q2 P05Q3 P05Q4 $ P06Q1 P06Q2 P06Q3 P06Q4 $ P07Q1 P07Q2 P07Q3 P07Q4 $ P08Q1 ;* change all vintage names do v = 1965:4, vend compute [label] vintage1 = %datelabel(v) compute [integer] vintage2 = v - 1965:3 /* if v.eq.1965:4 { display @10 'Vintage Index' @25 'Vintage Date' } display @10 vintage2 @25 vintage1 */ end do v **************************************************** * * * Part 1. Index the Vintage and Create * * Annualized Qtr-Over-Qtr Growth Rates * * * **************************************************** compute [integer] i = 1 declare series z declare vector[series] x(vtot) dxq(vtot) dxq5(vtot) declare vector[series] rev1_dxq(vtot) rev1_dxq5(vtot) dofor z = $ P65Q4 $ P66Q1 P66Q2 P66Q3 P66Q4 $ P67Q1 P67Q2 P67Q3 P67Q4 $ P68Q1 P68Q2 P68Q3 P68Q4 $ P69Q1 P69Q2 P69Q3 P69Q4 $ P70Q1 P70Q2 P70Q3 P70Q4 $ P71Q1 P71Q2 P71Q3 P71Q4 $ P72Q1 P72Q2 P72Q3 P72Q4 $ P73Q1 P73Q2 P73Q3 P73Q4 $ P74Q1 P74Q2 P74Q3 P74Q4 $ P75Q1 P75Q2 P75Q3 P75Q4 $ P76Q1 P76Q2 P76Q3 P76Q4 $ P77Q1 P77Q2 P77Q3 P77Q4 $ P78Q1 P78Q2 P78Q3 P78Q4 $ P79Q1 P79Q2 P79Q3 P79Q4 $ P80Q1 P80Q2 P80Q3 P80Q4 $ P81Q1 P81Q2 P81Q3 P81Q4 $ P82Q1 P82Q2 P82Q3 P82Q4 $ P83Q1 P83Q2 P83Q3 P83Q4 $ P84Q1 P84Q2 P84Q3 P84Q4 $ P85Q1 P85Q2 P85Q3 P85Q4 $ P86Q1 P86Q2 P86Q3 P86Q4 $ P87Q1 P87Q2 P87Q3 P87Q4 $ P88Q1 P88Q2 P88Q3 P88Q4 $ P89Q1 P89Q2 P89Q3 P89Q4 $ P90Q1 P90Q2 P90Q3 P90Q4 $ P91Q1 P91Q2 P91Q3 P91Q4 $ P92Q1 P92Q2 P92Q3 P92Q4 $ P93Q1 P93Q2 P93Q3 P93Q4 $ P94Q1 P94Q2 P94Q3 P94Q4 $ P95Q1 P95Q2 P95Q3 P95Q4 $ P96Q1 P96Q2 P96Q3 P96Q4 $ P97Q1 P97Q2 P97Q3 P97Q4 $ P98Q1 P98Q2 P98Q3 P98Q4 $ P99Q1 P99Q2 P99Q3 P99Q4 $ P00Q1 P00Q2 P00Q3 P00Q4 $ P01Q1 P01Q2 P01Q3 P01Q4 $ P02Q1 P02Q2 P02Q3 P02Q4 $ P03Q1 P03Q2 P03Q3 P03Q4 $ P04Q1 P04Q2 P04Q3 P04Q4 $ P05Q1 P05Q2 P05Q3 P05Q4 $ P06Q1 P06Q2 P06Q3 P06Q4 $ P07Q1 P07Q2 P07Q3 P07Q4 $ P08Q1 ;* change all vintage names set x(i) / = z(t) compute i = i + 1 end dofor do i = 1,vtot set dxq(i) / = (((x(i)(t)/x(i)(t-1))**4)-1.0)*100.0 end do i *************************************************** * * * Part 2. Replace Missing Values for Various * * Vintages With Data From Preceding * * Vintage * * * *************************************************** * Part 2.A. Data Sets Feb92 to Nov92 * Problem: levels of PGDP exist from 59Q1-present only * Solution: replace missing growth rates with those in vintage * Nov91 = x(105) set dxq(106) 1947:2 1959:1 = dxq(105)(t) set dxq(107) 1947:2 1959:1 = dxq(105)(t) set dxq(108) 1947:2 1959:1 = dxq(105)(t) set dxq(109) 1947:2 1959:1 = dxq(105)(t) * Part 2.B. Data Sets Feb96 to Feb97 * Problem: levels of PGDP exist from 59Q3-present only * Solution: replace missing growth rates with those in vintage * Nov95 = x(121) set dxq(122) 1947:2 1959:3 = dxq(121)(t) set dxq(123) 1947:2 1959:3 = dxq(121)(t) set dxq(124) 1947:2 1959:3 = dxq(121)(t) set dxq(125) 1947:2 1959:3 = dxq(121)(t) set dxq(126) 1947:2 1959:3 = dxq(121)(t) * Part 2.C. Data Set Feb96 * Problem: missing 95Q4 observation due to Fed Gov shutdown * Solution: replace missing 95Q4 observation with predicted value * from AR(4) specification in growth rates set x(122) 1995:4 1995:4 = 108.5 set x(122) 1995:3 1995:3 = 107.9 set dxq(122) 1995:4 1995:4 = (((x(122)(t)/x(122)(t-1))**4)-1.0)*100.0 set dxq(122) 1995:3 1995:3 = (((x(122)(t)/x(122)(t-1))**4)-1.0)*100.0 print 1995:3 1995:4 x(122) dxq(122) * Part 2.D. Data Sets Nov99 to Feb00 * Problem: levels of PGDP exist from 59Q1-present only * Solution: replace missing growth rates with those in vintage * Aug99 = x(136) set dxq(137) 1947:2 1959:1 = dxq(136)(t) set dxq(138) 1947:2 1959:1 = dxq(136)(t) *************************************************** * * * Part 3. Construct Indexed Four-Quarter * * Averages * * * *************************************************** * Modified this formula in May 2008 to make it at annual rates do i = 1,vtot * set dxq5(i) / = ((x(i)(t)/x(i)(t-5))-1.0)*100.0 set dxq5(i) / = ((((((dxq(i)(t)/100.0)+1.0)**0.25)* $ (((dxq(i)(t-1)/100.0)+1.0)**0.25)* $ (((dxq(i)(t-2)/100.0)+1.0)**0.25)* $ (((dxq(i)(t-3)/100.0)+1.0)**0.25)* $ (((dxq(i)(t-4)/100.0)+1.0)**0.25))**0.8)-1.0)*100.0 /* print(dates) / i dxq(i) dxq5(i) */ end do i *************************************************** * * * Part 4. Construct Actuals * * Latest * * One-Quarter Later * * One-Year Later * * Three-Years Later * * Pre-Benchmark * * * *************************************************** * latest (l) clear actual_l_q actual_l_q5 do time = 1965:3, send set actual_l_q time time = dxq(vtot)(t) set actual_l_q5 time time = dxq5(vtot)(t) compute i = i + 1 end do time print(dates) / actual_l_q actual_l_q5 * one-quarter later (1q) clear actual_1q_q actual_1q_q5 compute [integer] i = 1 do time = 1965:3, send-1 set actual_1q_q time time = dxq(i+1)(t) set actual_1q_q5 time time = dxq5(i+1)(t) compute i = i + 1 end do time print(dates) / actual_1q_q actual_1q_q5 * one-year later (1y) clear actual_1y_q actual_1y_q5 compute [integer] i = 1 do time = 1965:3, send-4 set actual_1y_q time time = dxq(i+4)(t) set actual_1y_q5 time time = dxq5(i+4)(t) compute i = i + 1 end do time print(dates) / actual_1y_q actual_1y_q5 *initial to three-years later clear actual_3y_q actual_3y_q5 compute [integer] i = 1 do time = 1965:3, send-12 set actual_3y_q time time = dxq(i+12)(t) set actual_3y_q5 time time = dxq5(i+12)(t) compute i = i + 1 end do time print(dates) / actual_3y_q actual_3y_q5 * * Section here: for each showing revision to last vintage before benchmark revision * Pre-benchmark vintages for NIPAs are 41, 61, 81, 105, 121, 136, 153 * Last observations for each are 1975:3, 1980:3, 1985:3, 1991:3, 1995:3, 1999:2, 2003:3 * clear actual_pb_q actual_pb_q5 compute [integer] i = 1 do time = 1965:3, 1975:3 set actual_pb_q time time = dxq(41)(t) set actual_pb_q5 time time = dxq5(41)(t) * print(dates) / i r_i_pb_q * display 'i = ' i compute i = i + 1 end do time do time = 1975:4, 1980:3 set actual_pb_q time time = dxq(61)(t) set actual_pb_q5 time time = dxq5(61)(t) * print(dates) / i actual_pb_q * display 'i = ' i compute i = i + 1 end do time do time = 1980:4, 1985:3 set actual_pb_q time time = dxq(81)(t) set actual_pb_q5 time time = dxq5(81)(t) * print(dates) / i actual_pb_q * display 'i = ' i compute i = i + 1 end do time do time = 1985:4, 1991:3 set actual_pb_q time time = dxq(105)(t) set actual_pb_q5 time time = dxq5(105)(t) * print(dates) / i actual_pb_q * display 'i = ' i compute i = i + 1 end do time do time = 1991:4, 1995:3 set actual_pb_q time time = dxq(121)(t) set actual_pb_q5 time time = dxq5(121)(t) * print(dates) / i actual_pb_q * display 'i = ' i compute i = i + 1 end do time do time = 1995:4, 1999:2 set actual_pb_q time time = dxq(136)(t) set actual_pb_q5 time time = dxq5(136)(t) * print(dates) / i actual_pb_q * display 'i = ' i compute i = i + 1 end do time do time = 1999:3, 2003:3 set actual_pb_q time time = dxq(153)(t) set actual_pb_q5 time time = dxq5(153)(t) * print(dates) / i actual_pb_q * display 'i = ' i compute i = i + 1 end do time * this last one is just the latest vintage do time = 2003:4, send set actual_pb_q time time = dxq(vtot)(t) set actual_pb_q5 time time = dxq5(vtot)(t) * print(dates) / i actual_pb_q * display 'i = ' i compute i = i + 1 end do time print(dates) / actual_pb_q actual_pb_q5 open copy c:\data\LIV_actuals_p.xls copy(dates,format=xls,org=obs) / actual_l_q actual_l_q5 $ actual_1q_q actual_1q_q5 $ actual_1y_q actual_1y_q5 $ actual_3y_q actual_3y_q5 $ actual_pb_q actual_pb_q5