*! gentack v1.0.2 gimpavido@imf.org 26jun2015 *! gentack v1.0.0 11mar2014 *! gentack v1.0.1 11mar2015 copies labels of original variables to stacked variables *! gentack v1.0.1 26jul2015 uses stub for newvars and performs newvar checks capture program drop genstack program genstack version 10.0 syntax varlist(min=2 numeric) [if] [in], GENerate(string) [DOUBLE] ************************* Perform user error checks *************************** * check that you have observations marksample touse quietly count if `touse' if `r(N)' == 0 error 2000 *check that new vars are are not in use foreach var of local varlist { confirm new var `generate'`var' } */ ************* Cycle through varlist creating tempvar for each variable ******** local varlist_p local varlist_n foreach var of local varlist { * split the plane in >0 and <=0 tempvar `var'_p `var'_n qui gen `double' ``var'_p' = `var' if `var'>0 local varlist_p = "`varlist_p'" + " ``var'_p'" qui gen `double' ``var'_n' = `var' if `var'<=0 local varlist_n = "`varlist_n'" + " ``var'_n'" * construct separate stacked vars for >0 and <0 tempvar `var'_sp `var'_sn qui egen `double' ``var'_sp' = rowtotal(`varlist_p') qui egen `double' ``var'_sn' = rowtotal(`varlist_n') qui gen `double' `generate'`var' = . qui replace `generate'`var' = ``var'_sp' if `var'>0 qui replace `generate'`var' = ``var'_sn' if `var'<=0 * pass the varlabel to the stacked vars local varlabel : var label `var' label var `generate'`var' "`varlabel'" } end