***Do-File for the analysis in Barth/Blasius: Assessing rental price dynamics in two gentrified neighborhoods in Cologne by means of a dwelling panel *Please note: The full dataset will be published via the GESIS Datorium once the current funding phase of the project is finished (fall 2024) *data of the first four waves is published under https://doi.org/10.7802/2523 *Variable names in the final publication of the full data set may be subject to change * Please direct all questions concerning data and analysis to Dr. Alice Barth (albarth@uni-bonn.de) *use **dataset** **table 1 *profcode_2 to profcode_5: indicates the status of dwellings tab profcode_2 tab profcode_3 tab profcode_4 tab profcode_5 *Translation of variable categories in profcode_2 to profcode_5 *ersetz. HH- verweigert: new residents - refusal *ersetz.HH- nicht erreicht: new residents - not available *ersetz. HH- interview: new residents: Interviews *ZP1=ZP2 - Interview: staying residents: Interview *ZP1=ZP2 - verweigert: staying residents: refusal *ZP1=ZP2 - nicht erreicht: staying residents: not available *ZP1#ZP2 - neue Person Interview: staying residents, but interview with a different target person *ZP1#ZP2 - verweigert: staying residents, but a new target person refused interview *in table 1, new target persons have been counted as staying residents in order to ensure comparability to the numbers of new residents (in-movers) *table 2: mean rent and mean rent per square meter in Deutz and Mülheim, 2010-2014, 2022 **missing values mvdecode v4_Jahr_5, mv(9999) mvdecode v9_1 v9_2 v9_3 v9_4 v9_5, mv(9999 9998 9997 9996) mvdecode v7_1 v7_2 v7_3 v7_4 v7_5, mv(9999 9998 9997 9996) **v9: rent, square metres: v7 **generate variables for rent per square meter (mieteqm_w) gen mieteqm_w1 = v9_1/v7_1 gen mieteqm_w2 = v9_2/v7_2 gen mieteqm_w3= v9_3/v7_3 gen mieteqm_w4= v9_4/v7_4 gen mieteqm_w5 = v9_5/v7_5 **variable Stadtteil: neighborhood (Deutz or Mülheim) **variable fall_typ: indicates panel, dyad or new building **values for table 2: bysort Stadtteil: sum v9_1 v9_2 v9_3 v9_4 v9_5, detail bysort Stadtteil: sum mieteqm_w*, detail *wave 5: panel dwellings only: bysort Stadtteil: sum v9_5 if fall_typ_5==0, detail bysort Stadtteil: sum mieteqm_w5 if fall_typ_5==0, detail **preparation for table 3: mean average change in rent and rent per square meter **change of rent between waves gen mietediff2_1=v9_2-v9_1 gen mietediff3_2=v9_3-v9_2 gen mietediff4_3=v9_4-v9_3 gen mietediff5_4 = v9_5-v9_4 **change of rent/square meter between waves gen mqmdiff2_1 = mieteqm_w2 - mieteqm_w1 gen mqmdiff3_2 = mieteqm_w3 - mieteqm_w2 gen mqmdiff4_3 = mieteqm_w4 - mieteqm_w3 gen mqmdiff5_4 = mieteqm_w5 - mieteqm_w4 **create indicator of tenant change (new target person does not count as tenant change) *tenant change in wave 1: moved in after 06/2009 gen xneumiet_1 = . recode xneumiet_1 (.=2) if v4_Jahr_1 <2009 & v4_Jahr_1 !=. recode xneumiet_1 (.=1) if v4_Jahr_1 >2009 & v4_Jahr_1 !=. recode xneumiet_1 (.=2) if (v4_Jahr_1==2009 & v4_Monat_1 <7) & v4_Jahr_1 !=. recode xneumiet_1 (.=1) if (v4_Jahr_1==2009 & v4_Monat_1 >6) & v4_Jahr_1 !=. label def xneumiet 1 "tenant change" 2 "no tenant change" label val xneumiet_1 xneumiet *waves 2 to 5: new tenants are identified via status variable (profcode) gen xneumiet_2=. recode xneumiet_2 (.=1) if (profcode_2 <7) recode xneumiet_2 (.=2) if (profcode_2 >6 & profcode_2<11) label val xneumiet_2 xneumiet gen xneumiet_3=. recode xneumiet_3 (.=1) if (profcode_3 <7) recode xneumiet_3 (.=2) if (profcode_3 >6 & profcode_3<11) label val xneumiet_3 xneumiet gen xneumiet_4=. recode xneumiet_4 (.=1) if (profcode_4 <7) recode xneumiet_4 (.=2) if (profcode_4 >6 & profcode_4<11) label val xneumiet_4 xneumiet gen xneumiet_5 =. recode xneumiet_5 (.=1) if (profcode_5 < 7) recode xneumiet_5 (.=2) if (profcode_5 > 6 & profcode_5<11) label val xneumiet_5 xneumiet tab xneumiet_5 **in order to get a correct number of cases for Cohen's D, missing values in the rent variable need to be excluded in the tenant change indicator gen xxneumiet_2 = xneumiet_2 if mietediff2_1 !=. gen xxneumiet_3 = xneumiet_3 if mietediff3_2 !=. gen xxneumiet_4 = xneumiet_4 if mietediff4_3 !=. gen xxneumiet_5 = xneumiet_5 if mietediff5_4 !=. **table 3 ttest mietediff2_1 if mqmdiff2_1 > -1.5, by(xxneumiet_2) welch esize twosample mietediff2_1 if mqmdiff2_1 > -1.5, by(xxneumiet_2) welch ttest mqmdiff2_1 if mqmdiff2_1 > -1.5, by(xxneumiet_2) welch esize twosample mqmdiff2_1 if mqmdiff2_1 > -1.5, by(xxneumiet_2) welch ttest mietediff3_2 if mqmdiff3_2 > -1.5, by(xxneumiet_3) welch esize twosample mietediff3_2 if mqmdiff3_2 > -1.5, by(xxneumiet_3) welch ttest mqmdiff3_2 if mqmdiff3_2 > -1.5, by(xxneumiet_3) welch esize twosample mqmdiff3_2 if mqmdiff3_2 > -1.5, by(xxneumiet_3) welch ttest mietediff4_3 if mqmdiff4_3 >-1.5, by(xxneumiet_4) welch esize twosample mietediff4_3 if mqmdiff4_3 >-1.5, by(xxneumiet_4) welch ttest mqmdiff4_3 if mqmdiff4_3 >-1.5, by(xxneumiet_4) welch esize twosample mqmdiff4_3 if mqmdiff4_3 >-1.5, by(xxneumiet_4) welch ttest mietediff5_4 if mqmdiff5_4 >-1.5, by(xxneumiet_5) welch esize twosample mietediff5_4 if mqmdiff5_4 >-1.5, by(xxneumiet_5) welch ttest mqmdiff5_4 if mqmdiff5_4 > -1.5, by(xxneumiet_5) welch esize twosample mqmdiff5_4 if mqmdiff5_4 >-1.5, by(xxneumiet_5) welch **Tables Appendix (calculated before transforming dataset to long) *table A1 table living space in dwellings bysort Stadtteil: sum v7_1 if v9_1 !=., detail bysort Stadtteil: sum v7_2 if v9_2 !=., detail bysort Stadtteil: sum v7_3 if v9_3 !=., detail bysort Stadtteil: sum v7_4 if v9_4 !=., detail **panel dwellings only bysort Stadtteil: sum v7_5 if v9_5 !=. & fall_typ_5==0, detail **all dwellings (including new buildings and dyads) bysort Stadtteil: sum v7_5 if v9_5 !=., detail *table A2 see below *table A3: selected facilities of dwellings in W5 *Balcony: tab ausst_balkon if FBNr_5 !=. *central hot water suppply tab ausst_warmwasser_5 if FBNr_5 !=. *bathroom with shower and bathtub tab ausst_bad_5 if FBNr_5 !=. *separate WC for guests tab ausst_gaestebad_5 if FBNr_5 !=. *terrace/roof terrace tab ausst_terrasse_5 if FBNr_5 !=. *underfloor heating tab ausst_fussbheizung_5 if FBNr_5 !=. **Preparation for table 4 (fe regression) * dependent variable: rent per square meter * independent variables: * model 1: year (of data collection) = variable wave * model 2: wave, tenant change (xneumiet), number of household members (vh) *missing values mvdecode vh_3 vh_4, mv (7 9) mvdecode vjneu_ab18, mv(99) *recode of variable "household members" in wave 5 recode vjneu_14bis17 vjneu_unter14 (99=0) gen vh_5 = vjneu_ab18 + vjneu_14bis17 + vjneu_unter14 *drop dyads and new buildings in wave 5 in order to get a balanced dataset drop if fall_typ_5==1 drop if fall_typ_5==2 *Create long data reshape long mieteqm_w xneumiet_ vh_, i(FBNr_1) j(wave) xtset FBNr_1 wave *recode xneumiet_: tenant change is indicated by 0, no tenant change is 0 recode xneumiet_ (2=0) *use tenant change cumulatively bysort FBNr_1 (wave): gen xneusum= sum(xneumiet_) *three and four tenant changes are combined recode xneusum (4=3) *for the model of 2010-2014 only: two and three tenant changes are combined gen xneus_2 = xneusum recode xneus_2 (3=2) **linear variable for year (wave) recode wave (5=12) *table 4: Fixed-effects regressions on rent per square meter, Cologne-Mülheim and Cologne-Deutz, 2010-2014 *Model 1 xtreg mieteqm_w wave if Stadtteil==1 & xneus_2 !=. & vh_ !=. & wave!=12, fe vce (robust) xtreg mieteqm_w wave if Stadtteil==2 & xneus_2 !=. & vh_ !=. & wave!=12, fe vce (robust) *Model 2 xtreg mieteqm_w wave i.xneus_2 vh_ if Stadtteil==1 & wave!=12, fe vce (robust) xtreg mieteqm_w wave i.xneus_2 vh_ if Stadtteil==2 & wave!=12, fe vce (robust) **table 5: : Fixed-effects regressions on rent per square meter, Cologne-Mülheim and Cologne-Deutz, 2010-2022 xtreg mieteqm_w wave if Stadtteil==1 & xneusum !=. & vh_ !=., fe vce (robust) xtreg mieteqm_w wave if Stadtteil==2 & xneusum !=. & vh_ !=., fe vce (robust) xtreg mieteqm_w wave i.xneusum vh_ if Stadtteil==1, fe vce (robust) xtreg mieteqm_w wave i.xneusum vh_ if Stadtteil==2, fe vce (robust) *table A2 (appendix): robustness check using wave dummies *Model 1 xtreg mieteqm_w i.wave if Stadtteil==1 & xneusum !=. & vh_ !=., fe vce (robust) xtreg mieteqm_w i.wave if Stadtteil==2 & xneusum !=. & vh_ !=., fe vce (robust) *model 2 xtreg mieteqm_w i.wave i.xneusum vh_ if Stadtteil==1, fe vce (robust) xtreg mieteqm_w i.wave i.xneusum vh_ if Stadtteil==2, fe vce (robust) drop xneusum xneus_2 reshape wide