*! 3nov23 Jonathan Thiele v1.01 *! jonathan.thiele@fu-berlin.de *! RWI - Leibniz-Institut fuer Wirtschaftsforschung * written in Stata version: 16.1 **program definition program define stckar version 10.0 **syntax definiton syntax varlist(min=2 max=11) [if] /// [, noTOTal noSORT noLABELS /// noDRAW ORDer /// noFIXEDCOLORS /// SCHEME(string) /// STATistics(string) /// GRAPHOPTions(string) /// AREAOPTions(string) /// LINEOPTions(string)] **naming arguments args v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 **if condition marksample touse preserve qui keep if `touse' == 1 **nodraw if "`draw'" == "nodraw"{ local graphoptions = "`graphoptions' nodraw" } **scheme option if "`scheme'" != ""{ gr_setscheme local oldscheme = "`.__SCHEME.scheme_name'" set scheme `scheme' } gr_setscheme **1) **checking number of variables tokenize `varlist' local nvars = 1 while "``nvars''" != "" { local ++nvars } local --nvars **setting the x variable local varx = "``nvars''" local drop var`nvars' local --nvars **2) **sorting the variables local varlist2 local varlist3 if "`statistics'" == ""{ local statistics mean } forvalues i = 1/`nvars'{ local varlist2 = "`varlist2'`i'" local varlist3 = "`varlist3'v`i' " if `i' < `nvars'{ local varlist2 = "`varlist2'," } qui sum `v`i'' local v`i'stat = r(`statistics') } if "`sort'" == "nosort"{ local varlist2 forvalues i = `nvars'(-1)1{ local varlist2 = "`varlist2'`i'" if `i' > 1{ local varlist2 = "`varlist2'," } } } tempname variables matrix input variables = (`varlist2') if "`sort'" != "nosort"{ local bubble = `nvars' while `bubble' > 1{ local temp = `bubble' - 1 forvalues i = 1/`temp'{ local j = `i' + 1 local k = variables[1,`i'] local p = variables[1,`j'] if abs(`v`k'stat') > abs(`v`p'stat'){ local temp = variables[1,`j'] matrix variables[1,`j'] = variables[1,`i'] matrix variables[1,`i'] = `temp' } } local --bubble } } **3) **further preparation local varnum = variables[1,1] local smallervar = "`v`varnum''" local smallervar2 = "v`varnum'" local graphlist `smallervar2' local graphlist2 (area `smallervar2' `varx', color(`.__SCHEME.color.p`varnum'')) tempvar ``smallervar2'' qui gen `smallervar2' = `smallervar' tempvar pos neg qui gen pos = 0 qui gen neg = 0 qui replace pos = ``smallervar2'' if ``smallervar2'' > 0 qui replace neg = ``smallervar2'' if ``smallervar2'' < 0 **4) **calculation of summed up values local i = 2 while `i' <= `nvars'{ local j = `i'-1 local varnum = variables[1,`i'] local largervar = "v`varnum'" tempvar `smallervar2'_`largervar' qui gen `smallervar2'_`largervar' = 0 qui replace `smallervar2'_`largervar' = pos + ``largervar'' if ``largervar'' > 0 qui replace `smallervar2'_`largervar' = neg + ``largervar'' if ``largervar'' < 0 qui replace pos = `smallervar2'_`largervar' if ``largervar'' > 0 qui replace neg = `smallervar2'_`largervar' if ``largervar'' < 0 local ++i local smallervar = "`smallervar2'_`largervar'" local smallervar2 = "`smallervar'" local graphlist = "`smallervar2' `graphlist'" local graphlist2 = "(area `smallervar2' `varx', color(`.__SCHEME.color.p`varnum'')) `graphlist2'" } **total if "`total'" != "nototal"{ tempvar tot_effect qui gen tot_effect = 0 forvalues i = 1(1)`nvars'{ qui replace tot_effect = tot_effect + `v`i'' } } **5) **graphing and labeling if "`order'" == "order"{ dis "Legend Order:" } local i = `nvars' local j = 1 local labellist while `i' > 0{ local varnum = variables[1,`i'] local labelvar = "v`varnum'" if "`labels'" == "nolabels"{ local labellist = "`labellist'" + "label(`j' ``labelvar'') " } else{ local label0: variable label ``labelvar'' if "`label0'" == ""{ local label0 = "``labelvar''" } local labellist = "`labellist'" + "label(`j' `label0') " } if "`order'" == "order"{ dis "`j': ``labelvar''" } local --i local ++j } local nvars = `nvars' + 1 if "`total'" == "nototal"{ if "`fixedcolors'" == "nofixedcolors"{ twoway (area `graphlist' `varx'), legend(`labellist') `areaoptions' `graphoptions' } else{ twoway `graphlist2', legend(`labellist') `areaoptions' `graphoptions' } } else{ if "`fixedcolors'" == "nofixedcolors"{ twoway (area `graphlist' `varx' `areaoptions') (line tot_effect `varx', color(black) lpattern(dash) `lineoptions') /// , legend(`labellist' label(`nvars' total)) `graphoptions' } else{ twoway `graphlist2' (line tot_effect `varx', color(black) lpattern(dash) `lineoptions') /// , legend(`labellist' label(`nvars' total)) `graphoptions' } } if "`scheme'" != ""{ set scheme `oldscheme' } restore end