/* Wholesale wastewater do-file version 2.0 Version log Version 1.0: First version of the PR24 wholesale wastewater do-file Version 2.0: Re-ordered statistical tests in line with template order, and added calculation of efficiency scores for each regression. In this do file we prepare the wholesale wastewater base cost assessment dataset and replicate the PR19 Final Determination models (with additional years of outturn data). The following code can be used to test other wholesale wastewater base cost econometric specifications as part of the PR24 modelling consultation phase. */ *This do file has the following stages: *1.- Data preparation - Import the master dataset from Excel and assign labels and codes for all variables. *2.- Variables generation using codes. Each variable code has a label assigned to it. *2a.- Dependent variables (costs) *2b.- Independent variables (cost drivers) *3.- Calculate correlation coefficients and export them into Excel *4. Structure into a panel dataset format *5.- prepare macros for regressions *6.- Run regressions and tests *6a) Pooled OLS *6b) Random effects *7.- Export results and matrices into Excel *8.-Add a day and date stamp *9.- Calculate efficiency scores - Calculates efficiency rankings and scores based on PR19 model triangulation *10.- Export results *======================================================================================== *1.- Data preparation *======================================================================================== *1a.- Import the master dataset from Excel and assign labels and codes for all variables. clear matrix drop _all set more off set matsize 800 estimates drop _all macro drop _all cd "\\tsclient\O\OFWSHARE\Cost assessment\PR24\PR24 datasets\2022 11 Nov22" import excel ".\FM_WWW1_v3.0.xlsx", sheet("Stata dataset (nominal)") cellrange(A1:XX112) firstrow *Next, we assign names and labels with the first and second rows respectively to each variable using the following loop: foreach var of varlist * { label variable `var' "`=`var'[1]'" } drop in 1 *Then can destring all variables *We generate two variables, "start" and "end" so we always destring the relevant variables no matter what order we have: g start = "" g end = "" order companycode codecombine financialyear start destring start-end, replace force drop start end *Next, we rename the variables that were from external sources rename C_CD0014_PR19WW1 cpihadj *We check the number of osbervations per company and financial year tab companycode financialyear, m *======================================================================================== *2.- Variables generation using the codes. Each variable code has a label assigned to it. *======================================================================================== *2a.- Dependent variables (costs) *Modelled base costs are defined as: *The sum of the following cost categories: *Sewage collection *a) Power (BM402SC) *b) Income treated as negative expenditure (BM836SC) *c) Service charges/ Discharge consents (BM431SC) *d) Bulk discharge (BM140SC) *e) Renewals expensed in year - infra (BM839ISC) *f) Renewals expensed in year - noninfra (BM839NISC) *g) Other operating expenditure excluding renewals (BM839OSC) *h) Maintaining the long term of capability of the assets - infra (BC30945SC) *i) Maintaining the long term of capability of the assets - noninfra (CS00036SC) *j) Transfer private sewers and pumping stations (S3024SC) *k) Atypical expenditure adjustment (BN4012_SWC) *l) Reduce flooding risk for properties capex (botex plus) (S3023SC) *m) Reduce flooding risk for properties opex (botex plus) (B0337RFO_TOT) 2020-21 and 2021-22 only *n) Network reinforcement capex (botex plus) (B0200DSISWCWWC) *o) Network reinforcement opex (botex plus) (B0200DSISWCWWO) *Sewage treatment *a) Power (BM502ST) *b) Income treated as negative expenditure (BM836ST) *c) Service charges/ Discharge consents (BM531ST) *d) Bulk discharge (BM140ST) *e) Renewals expensed in year - infra (BM839IST) *f) Renewals expensed in year - noninfra (BM839NIST) *g) Other operating expenditure excluding renewals (BM839OST) *h) Maintaining the long term of capability of the assets - infra (BC30945ST) *i) Maintaining the long term of capability of the assets - noninfra (CS00036ST) *j) Transfer private sewers and pumping stations (S3024ST) *k) Atypical expenditure adjustment (BN4012_SWT) *l) Enhancement opex - chemcial removals (B0312CRO_SWT) 2020-21 and 2021-22 only *m) Enhancement opex - nitrogen removal (B0318NRO_SWT) 2020-21 and 2021-22 only *n) Enhancement opex - phosphorus removal (B0321PRO_SWT) 2020-21 and 2021-22 only *o) Enhancement opex - reduction of sanitary parameters (B0324RSO_SWT) 2020-21 and 2021-22 only *p) Enhancement opex - UV disinfection (or similar) (B0327UVO_SWT) 2020-21 and 2021-22 only *q) Reduce flooding risk for properties capex (botex plus) (S3023ST) *Bioresources *Sludge transport *a) Power (BM602STP) *b) Income treated as negative expenditure (BM836STP) *c) Service charges/ Discharge consents (BM631STP) *d) Bulk discharge (BM140STP) *e) Renewals expensed in year - infra (BM839ISTP) *f) Renewals expensed in year - noninfra (BM839NISTP) *g) Other operating expenditure excluding renewals (BM839OSTP) *h) Maintaining the long term of capability of the assets - infra (BC30945STP) *i) Maintaining the long term of capability of the assets - noninfra (CS00036STP) *Sludge treatment *a) Power (BM602SDT) *b) Income treated as negative expenditure (BM836SDT) *c) Service charges/ Discharge consents (BM631SDT) *d) Bulk discharge (BM140SDT) *e) Renewals expensed in year - infra (BM839ISDT) *f) Renewals expensed in year - noninfra (BM839NISDT) *g) Other operating expenditure excluding renewals (BM839OSDT) *h) Maintaining the long term of capability of the assets - infra (BC30945SDT) *i) Maintaining the long term of capability of the assets - noninfra (CS00036SDT) *j) Enhancement opex - sludge enhancement (quality) (B0343SEO_BIO) *Sludge disposal *a) Power (BM602SDD) *b) Income treated as negative expenditure (BM836SDD) *c) Service charges/ Discharge consents (BM631SDD) *d) Bulk discharge (BM140SDD) *e) Renewals expensed in year - infra (BM839ISDD) *f) Renewals expensed in year - noninfra (BM839NISDD) *g) Other operating expenditure excluding renewals (BM839OSDD) *h) Maintaining the long term of capability of the assets - infra (BC30945SDD) *i) Maintaining the long term of capability of the assets - noninfra (CS00036SDD) *j) Backcasting adjustment (bioresources) (BN5000) *k) Atypical expenditure adjustment (BN4012_BIO) *Minus the following cost categories: *l) Traffic Management Act - sewage collection (W3032NPSC) *m) Traffic Management Act - sewage treatment (W3032NPST) *n) Traffic Management Act - bioresources (W3032SL) *o) Industrial Emissions Directorate - sewage collection (W3036NPSC) *p) Industrial Emissions Directorate - sewage treatment (W3036NPST) *q) Industrial Emissions Directorate - bioresources (W3036SL) *r) Diversions expenditure - wastewater NRSWA - sewage collection (APP28RR_WW0002) *s) Diversions expenditure - wastewater Other non-s185 - sewage collection (APP28RR_WW0003) *t) developer services base cost adjustment (treated water dist only) (B0201DSWWADJ) *u) Backcasting adjustment (sewage treatment) (BN5000) *Based on the description above, we used the following codes to calculate base costs (botex) *The following acronyms are used for each level of aggregation: *botex stands for base costs used for econometric modelling *swc: sewage collection *swt: sewage treatment *br: bioresources *brp: bioresources plus (which includes bioresources and sewage treatment) *npww: network plus wastewater *www: wholesale wastewater *As an example, botexwww stands for wholesale wastewater base costs * First we replace the missing values in transfer private sewers and pumping stations, non-section 185 diversions for 2020-21 onwards, and for enhancement opex prior to 2020-21 (except network reinforcement) foreach x of varlist S3024* APP28RR_WW0002 APP28RR_WW0003 B0200DSISWCWWC B0200DSISWCWWO B0337RFO_TOT B0312CRO_SWT B0318NRO_SWT B0321PRO_SWT B0324RSO_SWT B0327UVO_SWT B0343SEO_BIO{ replace `x' = 0 if(`x' == .) } foreach x of varlist W3032NPSC W3032NPST W3032SL W3032OTHTOT_21 W3036NPSC W3036NPST W3036SL W3036OTHTOT{ replace `x' = 0 if inlist(financialyear, "2020-21", "2021-22") } *As a first step we calculate modelled base costs without enhancement. Botex plus includes 1) network reinforcement and reduced sewer flooding growth lines for SWC and 2) reduced sewer flooding growth lines for SWT g botexswc = BM402SC + BM836SC + BM431SC + BM140SC + BM839ISC + BM839NISC + BM839OSC + BC30945SC + CS00036SC + S3024SC + BN4012_SWC - W3032NPSC - W3036NPSC - APP28RR_WW0002 - APP28RR_WW0003 - B0201DSWWADJ g botexswt = BM502ST + BM836ST + BM531ST + BM140ST + BM839IST + BM839NIST + BM839OST + BC30945ST + CS00036ST + S3024ST + BN4012_SWT - W3032NPST - W3036NPST - BN5000 + B0312CRO_SWT + B0318NRO_SWT + B0321PRO_SWT + B0324RSO_SWT + B0327UVO_SWT g botexsludgetransport = BM602STP + BM836STP + BM631STP + BM140STP + BM839ISTP + BM839NISTP + BM839OSTP + BC30945STP + CS00036STP g botexsludgetreatment = BM602SDT + BM836SDT + BM631SDT + BM140SDT + BM839ISDT + BM839NISDT + BM839OSDT + BC30945SDT + CS00036SDT + B0343SEO_BIO g botexsludgedisposal = BM602SDD + BM836SDD + BM631SDD + BM140SDD + BM839ISDD + BM839NISDD + BM839OSDD + BC30945SDD + CS00036SDD g botexbr = botexsludgetransport + botexsludgetreatment + botexsludgedisposal + BN5000 + BN4012_BIO - W3032SL - W3036SL g botexplusswc = botexswc + S3023SC + B0337RFO_TOT + B0200DSISWCWWC + B0200DSISWCWWO g botexplusswt = botexswt + S3023ST g botexbrp = botexbr + botexswt g botexplusbrp = botexbr + botexplusswt g botexnpww = botexswc + botexswt g botexplusnpww = botexplusswc + botexplusswt g botexwww = botexnpww + botexbr g botexpluswww = botexplusnpww + botexbr *2b.- Independent variables (cost drivers) *Independent variables have the following terminology: *Those starting with "pct" refer to a variables expressed in percentage terms. For these variables we use a scale from 0 to 100. So 80 means 80%. *Variables are transformed in logs with the exception of the percent variables. *Scale variables *Number of properties g properties = BN1178 * 1000 *Sludge produced g sludgeprod = MP05611 *Load - using Phosphorus total load g load = STWDP125_21 *Sewer length g sewerlength = BN13535_21 + BN13528 *Specific network characteristics variables for each element of the supply chain *Sewage collection *Pumping station capacity per sewer lenght g pumpingcapperlength = S4029 / sewerlength *Sewage treatment *% of load with ammonia consent below 3mg g pctnh3below3mg = ((STWDA121 + STWDA122_21) / (load)) * 100 *% of load treated at bands 1-3 (smaller bands tend to have higher unit cost) g pctbands13 = ((STWDP005_21 + STWDP019_21 + STWDP033_21) / (load)) * 100 *% of load treated at bands 6 (larger bands tend to have lower unit cost due to economies of scale) g pctbands6 = ((STWDP105_21) / (load)) * 100 *Number of sewage treatment works per property (sewage treatment) g swtwperpro = STWC115_21 / properties *Properties density g density = properties / sewerlength *Weighted average densites g WAD_MSOA_population = BN4006 g WAD_MSOA_area = BN4007 g WAD_LAD = BN4008 g WAD_MSOAtoLAD_population = BN4015 g WAD_MSOAtoLAD_area = BN4016 *The next step is to keep the relevant variables for logs and real terms transformation where applicable. keep botex* S3023* /// Dependent variables and sewer flooding enhancement costs properties sewerlength sludgeprod load /// Scale variables pumpingcapperlength /// Complexity, sewage collection pctnh3below3mg pctbands13 pctbands6 swtwperpro /// Complexity, sewage treatment density WAD_MSOA_population WAD_MSOA_area WAD_LAD WAD_MSOAtoLAD_population WAD_MSOAtoLAD_area /// Density and different measures of weighted average density developed by Ofwat cpihadj companycode financialyear /// Variables to set panel dataset as well as cpih adjustments (cphadj) to deflate costs. *Convert modelled base costs and enhancement costs in real terms using the CPIH adjustments and 2017/18 as base year foreach x of varlist botex* S3023*{ replace `x' = `x' * cpihadj rename `x' real`x' } *Transform variables to log. We don't trasform those variables expressed in percentage. *To allow for flexibility we generate two temporary variables that mark the start and end of the range to be converted to log g temp1=1 g temp2=1 *Then place those variables in the left that are not being transformed order companycode financialyear cpihadj pct* temp1 *Transform to natural logs foreach x of varlist temp1-temp2 { g ln`x' = ln(`x') } drop temp* lntemp* *Calculate the quadratic term for the three weighted average density metrics *Weighted average densites g lnWAD_MSOA_population2 = lnWAD_MSOA_population^2 g lnWAD_MSOA_area2 = lnWAD_MSOA_area^2 g lnWAD_LAD2 = lnWAD_LAD^2 g lnWAD_MSOAtoLAD_population2 = lnWAD_MSOAtoLAD_population^2 g lnWAD_MSOAtoLAD_area2 = lnWAD_MSOAtoLAD_area^2 ******************************************************************************************************************************************************************************** *2.c - SAVE FM_WW1 DATASET save "FM_WWW1 new 2022", replace export excel companycode financialyear realbotex* sewerlength sludgeprod load pumpingcapperlength pctnh3below3mg pctbands13 pctbands6 swtwperpro density WAD_LAD lnWAD_LAD2 using ".\WWW - Costs and costs drivers - 21-22.xlsx", sheet("Costs and costs drivers") sheetmodify firstrow(variables) *================================================================= *3.- Calculate correlation coefficients and export them into Excel *================================================================= corr * putexcel set ".\WWW Correlation Matrix - 21-22.xls", replace putexcel A1 = matrix(r(C)), names *=================================================== *4. Structure into a panel dataset format *=================================================== *FM1 data use "FM_WWW1 new 2022", clear *Assign numerical values to company codes and financial years: *For company code: encode companycode, g (id) *set modelling period start and end global year1 2012 global year2 2022 *For financial year: g year=real(substr(financialyear,1,4))+1 *Then we set the dataset as panel xtset id year *Even though we do not use any time trend or years dummies in our models for consultation, we generate these variables for the readers to test. *Time trend egen timetrend = group(financialyear) *Time dummies tab year, g(dummyyear) *Also create our codecombine (id year) combination for references. We will need this variable for influential observations identification egen codecombine = concat(companycode year) *================================================================= *5.- Prepare the macros for different regression specifications *================================================================= * Label variables for easy understanding *Dependent variables label var realbotexbr "Bioresources botex, £m" label var realbotexswt "Sewage treatment botex, £m" label var realbotexswc "Sewage collection botex, £m" label var realbotexbrp "Bioresources plus botex, £m" label var realbotexnpww "Wastewater network plus botex, £m" label var realbotexwww "Wholesale wastewater botex, £m" *Independent variables label var properties "Number of connected properties" label var sludgeprod "Sludge produced" label var load "Load entering the STWs" label var sewerlength "Total sewer length" label var pumpingcapperlength "Pumping capacity/km of sewer" label var pctnh3below3mg "Percentage of load with ammonia below 3mg/l" label var swtwperpro "Number of STWs per property" label var pctbands13 "Percentage of load treated in STWs bands 1-3" label var pctbands6 "Percentage of load treated in STWs band 6" label var density "Number of properties per km of sewer length" label var WAD_LAD "Weighted average population density based on LADs, weighted by population" * Sewage Collection (added squared term to reg2 as per CMA FD methodology) global reg1 lnrealbotexplusswc lnsewerlength lnpumpingcapperlength lndensity global reg2 lnrealbotexplusswc lnsewerlength lnpumpingcapperlength lnWAD_LAD lnWAD_LAD2 * Sewage Treatment* global reg3 lnrealbotexplusswt lnload pctbands13 pctnh3below3mg global reg4 lnrealbotexplusswt lnload pctbands6 pctnh3below3mg * Bioresources* global reg5 lnrealbotexbr lnsludgeprod lnWAD_LAD pctbands13 global reg6 lnrealbotexbr lnsludgeprod lnswtwperpro * Bioresources plus * global reg7 lnrealbotexplusbrp lnload pctbands13 pctnh3below3mg global reg8 lnrealbotexplusbrp lnload pctbands6 pctnh3below3mg *Also define the sample period. The model period refers to the period for our econometric models. The catch-up period refers to the last five years of the historical period. The PR19 period refers to 2020-25 g modelperiod = 1 if year < 2023 g catchupperiod = 1 if year > 2017 & year < 2023 *================================================================= *6.- Run regressions and tests *================================================================= *6a) Pooled OLS (regressions have been added for reference) forvalues i = 1(1)8{ *Run Pooled OLS with clustered standard errors at company level eststo ols`i' : reg ${reg`i'}, vce(cluster id) estadd scalar RSS = e(rss): ols`i' local RSS = e(rss) local df = e(df_m) predict residuals`i',resid *Adjusted R squared estadd scalar R_squared = e(r2_a): ols`i' *RESET Test ovtest estadd scalar RESET_P_value = r(p): ols`i' *VIF test vif estadd scalar VIF_statistic = r(vif_1): ols`i' *Pooling Test local foryears = "${year1}/${year2}" scalar N_rest = (${year2}-${year1})*(`df'+1) // N_res = number of restrictions scalar rss_unrest = 0 forvalues y = `foryears' { quietly regress ${reg`i'} if year==`y' scalar rss_unrest = rss_unrest+e(rss) // Sum up RSS for each year in sample period } scalar df_unrest = (${year2}-${year1}+1)*(e(N)-(e(df_m)+1)) scalar F_num = (`RSS'-rss_unrest)/(N_rest) scalar F_denom =(rss_unrest)/(df_unrest) scalar F_cor = F_num/F_denom // F statistic for pooling estadd scalar Pooling = 1-F(N_rest,df_unrest,F_cor): ols`i' // P value for pooling test *Normality Test sktest residuals`i' estadd scalar Normality = r(P_chi2): ols`i' *Heteroskedasticity test quietly eststo olshet`i': reg ${reg`i'} estat hettest estadd scalar Heteroskedasticity = r(p): ols`i' eststo drop olshet`i' *Add title to the regression estadd local Estimation_method = "Pooled OLS": ols`i' } *6b. - Random effects forvalues i = 1(1)8{ *Run Pooled random effect regressions with clustered standard errors at company level and store results. eststo re`i': xtreg ${reg`i'} if modelperiod==1, re vce(cluster id) *We will need predicted and actual costs in levels for the RESET test. predict yhatre`i' , xb replace yhatre`i' = exp(yhatre`i') *Overall R squared estadd scalar R_squared = e(r2_o): re`i' *Breusch Pagan LM test for RE xttest0 estadd scalar LM = r(p): re`i' *The following code lines calculates the RESET test as Stata does as this is not available for RE models. quietly sum yhatre`i' g nmlz_xb`i' = (yhatre`i'-r(mean))/r(sd) g xb2`i' = (nmlz_xb`i')^2 g xb3`i' = (nmlz_xb`i')^3 g xb4`i' = (nmlz_xb`i')^4 xtreg ${reg`i'} xb2`i' xb3`i' xb4`i' test xb2`i' xb3`i' xb4`i' estadd scalar RESET_P_value = r(p): re`i' *Add title to the regression estadd local Estimation_method = "Random Effects": re`i' } *================================================== *7.- Export results and matrices into Excel *================================================== *Export a matrix for the coefficients that are used in feeder models 2 and 4. estout * using ".\WWW coefficients - 21-22.xls" , replace /// stats(depvar) *================================================== *8.-Add a day and date stamp *================================================== g run_time_stamp = "$S_TIME" g run_date_stamp = "$S_DATE" export excel run_date_stamp run_time_stamp using ".\WWW coefficients datestamp - 21-22.xls", cell (A1) sheetmodify firstrow(variables) *================================================== *9.- Calculate efficiency scores and allowances *================================================== *9a) Calculate ranking and efficiency scores g companycodemerger = companycode *Estimate actual costs bysort companycodemerger: egen actualcostswc = sum(realbotexplusswc) if catchupperiod == 1 bysort companycodemerger: egen actualcostswt = sum(realbotexplusswt) if catchupperiod == 1 bysort companycodemerger: egen actualcostbr = sum(realbotexbr) if catchupperiod == 1 bysort companycodemerger: egen actualcostbrp = sum(realbotexplusbrp) if catchupperiod == 1 bysort companycodemerger: egen actualcost = sum(realbotexpluswww) if catchupperiod == 1 *Estimate triangulated costs per each year and per each regression and level of aggregation *Then sum the modelled cost over the last 5 years of the sample period *Sum of modelled cost over the last 5 years, for each regression forvalues i = 1(1)8 { g predictedcostreg`i' = yhatre`i' bysort companycodemerger: egen modelledcostreg`i' = sum(predictedcostreg`i') if catchupperiod == 1 } *Sum of modelled cost over the last 5 years, for each level of aggregation g predictedcostswc = (yhatre1*0.5) + (yhatre2*0.5) g predictedcostswt = (yhatre3*0.5) + (yhatre4*0.5) g predictedcostbr = (yhatre5*0.5) + (yhatre6*0.5) g predictedcostbrp = (yhatre7*0.5) + (yhatre8*0.5) bysort companycodemerger: egen modelledcostswc = sum(predictedcostswc) if catchupperiod==1 bysort companycodemerger: egen modelledcostswt = sum(predictedcostswt) if catchupperiod==1 bysort companycodemerger: egen modelledcostbr = sum(predictedcostbr) if catchupperiod==1 bysort companycodemerger: egen modelledcostbrp = sum(predictedcostbrp) if catchupperiod==1 *Estimate bottom up and top down costs g predictedbottomup = predictedcostswc + predictedcostswt + predictedcostbr g predictedmidlevel = predictedcostswc + predictedcostbrp *Triangulate bottom up and top down costs to estimate our predicted costs g predictedcost = (predictedbottomup * 0.5) + (predictedmidlevel * 0.5) bysort companycodemerger: egen triangulatedcost = sum(predictedcost) if catchupperiod == 1 *Estimate efficiency scores and ranking for each regression and each triangulated level of aggregation g efficiencyscore = actualcost / triangulatedcost egen rank = rank(efficiencyscore) if year == 2022 g efficiencyscorereg1 = actualcostswc / modelledcostreg1 g efficiencyscorereg2 = actualcostswc / modelledcostreg2 g efficiencyscorereg3 = actualcostswt / modelledcostreg3 g efficiencyscorereg4 = actualcostswt / modelledcostreg4 g efficiencyscorereg5 = actualcostbr / modelledcostreg5 g efficiencyscorereg6 = actualcostbr / modelledcostreg6 g efficiencyscorereg7 = actualcostbrp / modelledcostreg7 g efficiencyscorereg8 = actualcostbrp / modelledcostreg8 g efficiencyscoreswc = actualcostswc / modelledcostswc g efficiencyscoreswt = actualcostswt / modelledcostswt g efficiencyscorebr = actualcostbr / modelledcostbr g efficiencyscorebrp = actualcostbrp / modelledcostbrp *================================================================= *10.- Export results *================================================================= *Save all results in matrices *Create a rank matrix of efficiency scores and ranking mkmat rank if(year==2022), mat(rank) rownames(companycodemerger) mkmat efficiencyscore if(year==2022), mat(efficiencyscore) rownames(companycodemerger) mkmat efficiencyscoreswc if(year==2022), mat(efficiencyscoreswc) rownames(companycodemerger) mkmat efficiencyscoreswt if(year==2022), mat(efficiencyscoreswt) rownames(companycodemerger) mkmat efficiencyscorebr if(year==2022), mat(efficiencyscorebr) rownames(companycodemerger) mkmat efficiencyscorebrp if(year==2022), mat(efficiencyscorebrp) rownames(companycodemerger) forvalues i = 1(1)8 { mkmat efficiencyscorereg`i' if(year==2022), mat(efficiencyscorereg`i') rownames(companycode) } *Name the matrix matrix rank = rank matrix efficiencyscore = efficiencyscore matrix efficiencyscoreswc = efficiencyscoreswc matrix efficiencyscoreswt = efficiencyscoreswt matrix efficiencyscorebr = efficiencyscorebr matrix efficiencyscorebrp = efficiencyscorebrp forvalues i = 1(1)8 { matrix efficiencyscorereg`i' = efficiencyscorereg`i' } *Export the results estout using "WWW Results - 2021-22.xls", replace /// cells(b(star fmt(3)) p(par({ }))) starlevels( * 0.10 ** 0.05 *** 0.010) /// stats(depvar Estimation_method N vce R_squared RESET_P_value VIF_statistic Pooling Normality Heteroskedasticity LM) mlabels(,titles) *Export the efficiency ranking and efficiency scores matrices estout matrix(rank) using "WWW Results - 2021-22.xls" , append estout matrix(efficiencyscore) using "WWW Results - 2021-22.xls" , append estout matrix(efficiencyscoreswc) using "WWW Results - 2021-22.xls" , append estout matrix(efficiencyscoreswt) using "WWW Results - 2021-22.xls" , append estout matrix(efficiencyscorebr) using "WWW Results - 2021-22.xls" , append estout matrix(efficiencyscorebrp) using "WWW Results - 2021-22.xls" , append forvalues i = 1(1)8 { estout matrix(efficiencyscorereg`i') using "WWW Results - 2021-22.xls" , append } *************************************************************************************************************