version 11.1 cap log close clear * set mem 100m set matsize 800 set more off log using bootstrapfeprofit.log, replace ****************************************REVENUES EQUATION******************************************** use Englandfinancial.dta, clear *Deflate the financial data replace wage=(wage/rpimult) replace revffp=revffp/rpimult replace tanfixass=(tanfixass/rpimult) *drop inappropriate years/teams drop if notseasaccyear==1 drop if wage==. drop if lagwage==. *deflate the number of points by the maximum gen teams=0 forvalues i=1/2{ forvalues j=2000/2010{ count if div==`i' & year==`j' quietly return list replace teams=r(N) if div==`i' & year==`j' } } forvalues j=201000/201004{ count if div==1 & year==`j' quietly return list replace teams=r(N) if div==1 & year==`j' } gen mpoints=6*(teams-1) gen relpoints=points/mpoints *generate the FE dummies for years division quietly tab year if year<2011, gen(dumyear) quietly tab div, gen(dumdiv) *joint FE division year forvalues i=1/2{ forvalues j=1/11{ gen dumyt`i'`j'=dumyear`j'*dumdiv`i' replace dumyt`i'`j'=0 if year>2011 } } replace dumyt111=1 if year>2011 * team FE quietly tab home_id, gen(dumhome) quietly tab away_id, gen(dumaway) *Take the logs gen lrev=log(revffp) gen ltanfixass=log(tanfixass) gen lmpoints=log(points/mpoints) *ESTIMATION xtset home_id year reg lrev ltanfixass lmpoints lagprom lagrel notultpar dumyt* if year<2011 xtreg lrev ltanfixass lmpoints lagprom lagrel notultpar dumyt* if year<2011 est store re xtreg lrev ltanfixass lmpoints lagprom lagrel notultpar dumyt* if year<2011, fe est store fe hausman fe re reg lrev ltanfixass lmpoints lagprom lagrel notultpar dumyt* dumhome* if year<2011 quietly ereturn list matrix rev=e(b) matrix revvar=e(V) ***************************ESTIMATE THE CSF**************************************** use Englandmaster.dta, clear *generate the FE dummies for teams *drop inappropriate years/teams drop if home_notseasaccyear==1 drop if away_notseasaccyear==1 drop if home_wage==. drop if away_wage==. drop if home_lagwage==. drop if away_lagwage==. drop if year<2000 drop if division>2 quietly tab home_id, gen(dumhome) quietly tab away_id, gen(dumaway) local gamma1=1 local gamma2=0 local nr=61 local np=60 *generate the FE dummies for years and division quietly tab division, gen(dumdiv) **********************************************THE CSF ESTIMATION************************************************ *generate the per division wages gen home_lwage=log(home_wage) gen away_lwage=log(away_wage) gen home_llagwage=log(home_lagwage) gen away_llagwage=log(away_lagwage) forvalues k=1/2{ gen home_ldivwage`k'=home_lwage*dumdiv`k' gen away_ldivwage`k'=away_lwage*dumdiv`k' gen home_llagdivwage`k'=home_llagwage*dumdiv`k' gen away_llagdivwage`k'=away_llagwage*dumdiv`k' } *************************Producitivty polynomial************************ cap constraint drop forvalues j=1(1)2 { constraint def 50`j' home_ldivwage`j'=-away_ldivwage`i'`j' } **** create dummies and appropriate restrictions: forvalues i=1(1)`nr' { constraint def `i' dumhome`i'=-dumaway`i' } ****bootstrap the standard errors: cap program drop ivoprobitfe program define ivoprobitfe preserve bsample reg home_lwage home_llagdivwage* dumdiv* dumhome* dumaway* home_lagprom home_lagrel predict double home_wageresalt, resid reg away_lwage away_llagdivwage* dumdiv* dumhome* dumaway* away_lagprom away_lagrel predict double away_wageresalt, resid oprobit res home_ldivwage* away_ldivwage* home_wageresalt away_wageresalt dumhome* dumaway* , constraints(1/60,501/502) quietly ereturn list restore end bootstrap if year<2011, reps(200): ivoprobitfe matrix csfvar=e(V) ****first stage: reg home_lwage home_llagdivwage* dumdiv* dumhome* dumaway* home_lagprom home_lagrel if year<2011 predict double home_wageresalt, resid reg away_lwage away_llagdivwage* dumdiv* dumhome* dumaway* away_lagprom away_lagrel if year<2011 predict double away_wageresalt, resid ****second stage: ****no Rivers-Vuong oprobit res home_ldivwage* away_ldivwage* dumhome* dumaway* if year<2011 , constraints(1/`np',501/502) ****Rivers-Vuong oprobit res home_ldivwage* away_ldivwage* home_wageresalt away_wageresalt dumhome* dumaway* if year<2011 , constraints(1/`np',501/502) quietly ereturn list matrix csf=e(b) *********************************************SIMULATION STARTS****************************************** quietly{ **********************************************SIMULATION 1*********************************************** keep if year>2009 keep if year<201005 keep if div==1 replace exrate=1/exrate gen mpoints=38*3 matrix dir drawnorm r1-r89, means(rev) cov(revvar) drawnorm t1-t130, means(csf) cov(csfvar) forvalues i=1/89{ replace r`i'=. if 500<_n } forvalues i=1/130{ replace t`i'=. if 500<_n } mkmat r1-r89, matrix(g) nomissing mkmat t1-t130, matrix(t) nomissing drop r1-r89 t1-t130 tempfile bs save `bs' ********************************GENERATE ALL VARIABLES TO BE ABLE TO START THE LOOPS*************************** gen maxmiss=10 gen miss=0 gen r=0 gen bhomeres=0 gen bawayres=0 gen home=0 gen away=0 gen lcst=0 gen dcst=0 gen home_draw=0 gen home_win=0 gen home_loss=0 gen away_win=0 gen away_draw=0 gen away_loss=0 gen home_ltanfixass=log(home_tanfixass) gen away_ltanfixass=log(away_tanfixass) gen home_bfas=0 gen away_bfas=0 gen bp=0 gen home_par=0 gen away_par=0 gen byt=0 gen home_fe=0 gen away_fe=0 gen bcst=0 gen home_gamepoints=0 gen away_gamepoints=0 forvalues i=1/`nr'{ gen points`i'=0 } gen home_simpoints=0 gen away_simpoints=0 gen home_lpoints=log(home_points/mpoints) gen away_lpoints=log(away_points/mpoints) gen home_predrev=0 gen away_predrev=0 gen home_pointsold=0 gen away_pointsold=0 gen home_wagenew=1000 gen away_wagenew=1000 gen home_predrevnew=0 gen away_predrevnew=0 gen home_margin=0 *********************************THE FIRST LOOP TO CREATE THE TEMPFILE**************** **********************************THE MATCH OUTCOME PART************************************* replace r=csf[1,1] replace bhomeres=csf[1,5]*home_wageresalt replace bawayres=csf[1,6]*away_wageresalt replace lcst=csf[1,129] replace dcst=csf[1,130] replace home=0 replace away=0 forvalues i=1/`nr'{ replace home=home+csf[1,`i'+6]*dumhome`i' replace away=away+csf[1,`i'+6]*dumaway`i' } ************************************THE REVENUE PART************************************************* replace home_bfas=rev[1,1]*home_ltanfixass replace away_bfas=rev[1,1]*away_ltanfixass replace bp=rev[1,2] replace home_prom=rev[1,3]*home_lagprom replace away_prom=rev[1,3]*away_lagprom replace home_par=rev[1,5]*home_notultpar replace away_par=rev[1,5]*away_notultpar replace byt=rev[1,16] replace home_fe=0 replace away_fe=0 forvalues i=1/`nr'{ replace home_fe=home_fe+rev[1,`i'+27]*dumhome`i' replace away_fe=away_fe+rev[1,`i'+27]*dumaway`i' } replace bcst=rev[1,89] ************************************DETERMINE WHICH TEAMS ARE RESTRICTED********************************* gen restricted=0 gen home_restriction=0 replace home_restriction=(home_profffp+home_profffp1+home_profffp2)/3+5000000*exrate/3 if year==201004 replace home_restriction=(home_profffp+home_profffp1+home_profffp2)/3+5000000*exrate if year==201003 replace home_restriction=(home_profffp+home_profffp1+home_profffp2)/3+10000000*exrate if year==201002 replace home_restriction=(home_profffp+home_profffp1+home_profffp2)/3+15000000*exrate if year==201001 gen away_restriction=0 replace away_restriction=(away_profffp+away_profffp1+away_profffp2)/3+5000000*exrate/3 if year==201004 replace away_restriction=(away_profffp+away_profffp1+away_profffp2)/3+5000000*exrate if year==201003 replace away_restriction=(away_profffp+away_profffp1+away_profffp2)/3+10000000*exrate if year==201002 replace away_restriction=(away_profffp+away_profffp1+away_profffp2)/3+15000000*exrate if year==201001 replace restricted=1 if home_restriction<0 **********************************************THE ACTUAL SIMULATION********************************** ***********************************THE FIRST ROUND******************************************** *generate the first revenue observation replace home_loss=normal(lcst-r*home_lwage+r*away_lwage-bhomeres-bawayres-home+away) replace home_draw=normal(dcst-r*home_lwage+r*away_lwage-bhomeres-bawayres-home+away) /// -normal(lcst-r*home_lwage+r*away_lwage-bhomeres-bawayres-home+away) replace home_win=1-normal(dcst-r*home_lwage+r*away_lwage-bhomeres-bawayres-home+away) replace away_win=home_loss replace away_draw=home_draw replace away_loss=home_win replace home_gamepoints=3*home_win+home_draw replace away_gamepoints=3*away_win+away_draw forvalues i=1/`nr'{ replace points`i'=home_gamepoints*dumhome`i'+away_gamepoints*dumaway`i' bysort year: egen seasonpoints`i'=total(points`i') replace seasonpoints`i'=. if seasonpoints`i'==0 replace home_simpoints=seasonpoints`i' if dumhome`i'==1 replace away_simpoints=seasonpoints`i' if dumaway`i'==1 drop seasonpoints`i' } replace home_lpoints=log(home_simpoints/mpoints) replace away_lpoints=log(away_simpoints/mpoints) replace home_lpoints=log(home_points/mpoints) if year<2011 replace away_lpoints=log(away_points/mpoints) if year<2011 replace home_predrev=exp(home_bfas+home_lpoints*bp+home_prom+home_fe+home_par+byt+bcst) replace away_predrev=exp(away_bfas+away_lpoints*bp+away_prom+away_fe+away_par+byt+bcst) *replace the wage: replace home_wagenew=log(home_wage+home_restriction) replace home_wagenew=log(home_wage) if home_restriction>0 replace away_wagenew=log(away_wage+away_restriction) replace away_wagenew=log(away_wage) if away_restriction>0 *Portsmouth: replace home_wagenew=log(home_wage) if home_id==75 & year>2010 replace away_wagenew=log(away_wage) if away_id==75 & year>2010 *calculate the new winning percents: replace home_loss=normal(lcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace home_draw=normal(dcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) /// -normal(lcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace home_win=1-normal(dcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace away_win=home_loss replace away_draw=home_draw replace away_loss=home_win replace home_gamepoints=3*home_win+home_draw replace away_gamepoints=3*away_win+away_draw *go to the season points total: forvalues i=1/`nr'{ replace points`i'=home_gamepoints*dumhome`i'+away_gamepoints*dumaway`i' bysort year: egen seasonpoints`i'=total(points`i') replace seasonpoints`i'=. if seasonpoints`i'==0 replace home_simpoints=seasonpoints`i' if dumhome`i'==1 replace away_simpoints=seasonpoints`i' if dumaway`i'==1 drop seasonpoints`i' } replace home_simpoints=home_points if year<2011 replace away_simpoints=away_points if year<2011 replace home_lpoints=log(home_simpoints/mpoints) replace away_lpoints=log(away_simpoints/mpoints) *calculate the new revenues: replace home_predrevnew=exp(home_bfas+home_lpoints*bp+home_prom+home_fe+home_par+byt+bcst) replace away_predrevnew=exp(away_bfas+away_lpoints*bp+away_prom+away_fe+away_par+byt+bcst) *************************************START THE ITERATIONS******************************************* while maxmiss>0.1{ drop maxmiss replace home_pointsold=home_simpoints replace away_pointsold=away_simpoints *Reaction to revenue increase: replace home_wagenew=exp(home_wagenew) replace away_wagenew=exp(away_wagenew) replace home_wagenew=home_wagenew-home_predrev+home_predrevnew if home_predrev>home_predrevnew replace away_wagenew=away_wagenew-away_predrev+away_predrevnew if away_predrev>away_predrevnew replace home_wagenew=home_wage if year<201001 replace away_wagenew=away_wage if year<201001 *Portsmouth: replace home_wagenew=home_wage if home_id==75 replace away_wagenew=away_wage if away_id==75 replace home_wagenew=1000000 if home_wagenew<1000000 replace away_wagenew=1000000 if away_wagenew<1000000 replace home_wagenew=log(home_wagenew) replace away_wagenew=log(away_wagenew) *Portsmouth: replace home_wagenew=log(home_wage) if home_id==75 replace away_wagenew=log(away_wage) if away_id==75 replace home_predrev=home_predrevnew replace away_predrev=away_predrevnew *calculate the new winning percents: replace home_loss=normal(lcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace home_draw=normal(dcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) /// -normal(lcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace home_win=1-normal(dcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace away_win=home_loss replace away_draw=home_draw replace away_loss=home_win replace home_gamepoints=3*home_win+home_draw replace away_gamepoints=3*away_win+away_draw *go to the season points total: forvalues i=1/`nr'{ replace points`i'=home_gamepoints*dumhome`i'+away_gamepoints*dumaway`i' bysort year: egen seasonpoints`i'=total(points`i') replace seasonpoints`i'=. if seasonpoints`i'==0 replace home_simpoints=seasonpoints`i' if dumhome`i'==1 replace away_simpoints=seasonpoints`i' if dumaway`i'==1 drop seasonpoints`i' } replace home_simpoints=home_points if year<2011 replace away_simpoints=away_points if year<2011 replace home_lpoints=log(home_simpoints/mpoints) replace away_lpoints=log(away_simpoints/mpoints) replace home_predrevnew=exp(home_bfas+home_lpoints*bp+home_prom+home_fe+home_par+byt+bcst) replace away_predrevnew=exp(away_bfas+away_lpoints*bp+away_prom+away_fe+away_par+byt+bcst) replace miss=home_pointsold-home_simpoints replace miss=abs(miss) egen maxmiss=max(miss) } replace home_wagenew=exp(home_wagenew) replace home_predrevnew=home_revffp if year==2010 replace home_margin=home_wagenew/home_predrevnew preserve collapse home_simpoints home_predrevnew home_margin home_wagenew home restricted, by(home_team year) gen b=1 replace home_wagenew=home_wagenew/1000000 replace home_predrevnew=home_predrevnew/1000000 table home_team year, c(mean restricted mean home_wagenew) table home_team year, c(mean home_simpoints mean home_predrevnew mean home_margin mean home_wagenew) tempfile bs save `bs' restore noisily di in yellow "." _continue ******************************SET THE NUMBER OF ITERARIONS FOR THE BOOTSTRAP************************** forvalues q=2/200{ replace maxmiss=10 **********************************THE MATCH OUTCOME PART************************************* replace r=t[`q',1] replace bhomeres=t[`q',5]*home_wageresalt replace bawayres=t[`q',6]*away_wageresalt replace lcst=t[`q',129] replace dcst=t[`q',130] replace home=0 replace away=0 forvalues i=1/`nr'{ replace home=home+t[`q',`i'+6]*dumhome`i' replace away=away+t[`q',`i'+6]*dumaway`i' } ************************************THE REVENUE PART************************************************* replace home_bfas=g[`q',1]*home_ltanfixass replace away_bfas=g[`q',1]*away_ltanfixass replace bp=g[`q',2] replace home_prom=g[`q',3]*home_lagprom replace away_prom=g[`q',3]*away_lagprom replace home_par=g[`q',5]*home_notultpar replace away_par=g[`q',5]*away_notultpar replace byt=g[`q',16] replace home_fe=0 replace away_fe=0 forvalues i=1/`nr'{ replace home_fe=home_fe+g[`q',`i'+27]*dumhome`i' replace away_fe=away_fe+g[`q',`i'+27]*dumaway`i' } replace bcst=g[`q',89] **********************************************THE ACTUAL SIMULATION********************************** ***********************************THE FIRST ROUND******************************************** *generate the first revenue observation replace home_loss=normal(lcst-r*home_lwage+r*away_lwage-bhomeres-bawayres-home+away) replace home_draw=normal(dcst-r*home_lwage+r*away_lwage-bhomeres-bawayres-home+away) /// -normal(lcst-r*home_lwage+r*away_lwage-bhomeres-bawayres-home+away) replace home_win=1-normal(dcst-r*home_lwage+r*away_lwage-bhomeres-bawayres-home+away) replace away_win=home_loss replace away_draw=home_draw replace away_loss=home_win replace home_gamepoints=3*home_win+home_draw replace away_gamepoints=3*away_win+away_draw forvalues i=1/`nr'{ replace points`i'=home_gamepoints*dumhome`i'+away_gamepoints*dumaway`i' bysort year: egen seasonpoints`i'=total(points`i') replace seasonpoints`i'=. if seasonpoints`i'==0 replace home_simpoints=seasonpoints`i' if dumhome`i'==1 replace away_simpoints=seasonpoints`i' if dumaway`i'==1 drop seasonpoints`i' } replace home_lpoints=log(home_simpoints/mpoints) replace away_lpoints=log(away_simpoints/mpoints) replace home_lpoints=log(home_points/mpoints) if year<2011 replace away_lpoints=log(away_points/mpoints) if year<2011 replace home_predrev=exp(home_bfas+home_lpoints*bp+home_prom+home_fe+home_par+byt+bcst) replace away_predrev=exp(away_bfas+away_lpoints*bp+away_prom+away_fe+away_par+byt+bcst) *replace the wage: replace home_wagenew=log(home_wage+home_restriction) replace home_wagenew=log(home_wage) if home_restriction>0 replace away_wagenew=log(away_wage+away_restriction) replace away_wagenew=log(away_wage) if away_restriction>0 *Portsmouth: replace home_wagenew=log(home_wage) if home_id==75 & year>2010 replace away_wagenew=log(away_wage) if away_id==75 & year>2010 *calculate the new winning percents: replace home_loss=normal(lcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace home_draw=normal(dcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) /// -normal(lcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace home_win=1-normal(dcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace away_win=home_loss replace away_draw=home_draw replace away_loss=home_win replace home_gamepoints=3*home_win+home_draw replace away_gamepoints=3*away_win+away_draw *go to the season points total: forvalues i=1/`nr'{ replace points`i'=home_gamepoints*dumhome`i'+away_gamepoints*dumaway`i' bysort year: egen seasonpoints`i'=total(points`i') replace seasonpoints`i'=. if seasonpoints`i'==0 replace home_simpoints=seasonpoints`i' if dumhome`i'==1 replace away_simpoints=seasonpoints`i' if dumaway`i'==1 drop seasonpoints`i' } replace home_simpoints=home_points if year<2011 replace away_simpoints=away_points if year<2011 replace home_lpoints=log(home_simpoints/mpoints) replace away_lpoints=log(away_simpoints/mpoints) *calculate the new revenues: replace home_predrevnew=exp(home_bfas+home_lpoints*bp+home_prom+home_fe+home_par+byt+bcst) replace away_predrevnew=exp(away_bfas+away_lpoints*bp+away_prom+away_fe+away_par+byt+bcst) *************************************START THE ITERATIONS******************************************* while maxmiss>0.1{ drop maxmiss replace home_pointsold=home_simpoints replace away_pointsold=away_simpoints *Reaction to revenue increase: replace home_wagenew=exp(home_wagenew) replace away_wagenew=exp(away_wagenew) replace home_wagenew=home_wagenew-home_predrev+home_predrevnew if home_predrev>home_predrevnew replace away_wagenew=away_wagenew-away_predrev+away_predrevnew if away_predrev>away_predrevnew replace home_wagenew=home_wage if year<201001 replace away_wagenew=away_wage if year<201001 *Portsmouth: replace home_wagenew=home_wage if home_id==75 replace away_wagenew=away_wage if away_id==75 replace home_wagenew=1000000 if home_wagenew<1000000 replace away_wagenew=1000000 if away_wagenew<1000000 replace home_wagenew=log(home_wagenew) replace away_wagenew=log(away_wagenew) *Portsmouth: replace home_wagenew=log(home_wage) if home_id==75 replace away_wagenew=log(away_wage) if away_id==75 replace home_predrev=home_predrevnew replace away_predrev=away_predrevnew *calculate the new winning percents: replace home_loss=normal(lcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace home_draw=normal(dcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) /// -normal(lcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace home_win=1-normal(dcst-r*home_wagenew+r*away_wagenew-bhomeres-bawayres-home+away) replace away_win=home_loss replace away_draw=home_draw replace away_loss=home_win replace home_gamepoints=3*home_win+home_draw replace away_gamepoints=3*away_win+away_draw *go to the season points total: forvalues i=1/`nr'{ replace points`i'=home_gamepoints*dumhome`i'+away_gamepoints*dumaway`i' bysort year: egen seasonpoints`i'=total(points`i') replace seasonpoints`i'=. if seasonpoints`i'==0 replace home_simpoints=seasonpoints`i' if dumhome`i'==1 replace away_simpoints=seasonpoints`i' if dumaway`i'==1 drop seasonpoints`i' } replace home_simpoints=home_points if year<2011 replace away_simpoints=away_points if year<2011 replace home_lpoints=log(home_simpoints/mpoints) replace away_lpoints=log(away_simpoints/mpoints) replace home_predrevnew=exp(home_bfas+home_lpoints*bp+home_prom+home_fe+home_par+byt+bcst) replace away_predrevnew=exp(away_bfas+away_lpoints*bp+away_prom+away_fe+away_par+byt+bcst) replace miss=home_pointsold-home_simpoints replace miss=abs(miss) egen maxmiss=max(miss) } replace home_wagenew=exp(home_wagenew) replace home_predrevnew=home_revffp if year==2010 replace home_margin=home_wagenew/home_predrevnew preserve collapse home_simpoints home_predrevnew home_margin home_wagenew home restricted, by(home_team year) replace home_wagenew=home_wagenew/1000000 replace home_predrevnew=home_predrevnew/1000000 table home_team year, c(mean home_simpoints mean home_predrevnew mean home_margin mean home_wagenew) gen b=`q' append using `bs' save `bs', replace restore noisily di in yellow "." _continue } } *******************************REPORT RESULTS*********************************** use `bs', clear sort b sum b local rep=r(max) di `rep' *Rename the variables rename home_simpoints points rename home_wagenew wage rename home_margin wtto rename home_predrevnew revenue rename home_team team rename home productivity replace productivity=exp(productivity) bysort b: egen mprod=mean(productivity) replace productivity=productivity/mprod *calculate bootstrap standard errors bysort team year: egen avpoints=mean(points) gen dpoints=(points-avpoints)^2 bysort team year: egen sdpoints=total(dpoints) replace sdpoints=(sdpoints/`rep')^0.5 *produce the points table: table team year if b==1, c(mean points mean sdpoints mean productivity) save simulationresultop.dta, replace *calculate the average wage, revenue and wtto and standard errors on this: drop if team=="Portsmouth" bysort b year: egen avwage=mean(wage) bysort b year: egen avrevenue=mean(revenue) bysort b year: egen avwtto=mean(wtto) keep if team=="Arsenal" bysort year: egen mavwage=mean(avwage) bysort year: egen mavrevenue=mean(avrevenue) bysort year: egen mavwtto=mean(avwtto) for var wage revenue wtto: gen dX=(mavX-avX)^2 for var wage revenue wtto: bysort year: egen sdX=total(dX) for var wage revenue wtto: replace sdX=(sdX/`rep')^0.5 drop if b>1 *estimates and sd for the variables of interest: bysort year: sum avwage sdwage avrevenue sdrevenue avwtto sdwtto restricted log close clear