*! Stephan Huber (DrStephanHuber@yahoo.de) 1.0.0 17 October 2020 program sxpose2 version 8 syntax , clear [ force Format(string) FIRSTnames DEstring VARLabel VARName] if "`force'" == "" { foreach v of var * { capture confirm string var `v' if _rc { di as err /// "{p}dataset contains numeric variables; " /// "use {cmd:force} option if desired{p_end}" exit 7 } } } local nobs = _N qui d local nvars = r(k) if `nobs' > `c(max_k_theory)' { di as err "{p}not possible; would exceed present limit on " /// "number of variables{p_end}" exit 498 } forval j = 1/`nobs' { local new "`new' _var`j'" } capture confirm new var `new' if _rc { di as err "{p}sxpose2 would create new variables " /// "_var1-_var`nobs', but names already in use{p_end}" exit 110 } if "`format'" != "" { capture di `format' 1234.56789 if _rc { di as err "invalid %format" exit 120 } } else local format "%12.0g" if `nvars' > `nobs' set obs `nvars' unab varlist: * tokenize `varlist' qui forval j = 1/`nobs' { gen _var`j' = "" forval i = 1/`nvars' { cap replace _var`j' = ``i''[`j'] in `i' if _rc { replace _var`j' = /// string(``i''[`j'], "`format'") in `i' } } } capture confirm variable ___000vlist? if !_rc { di as err "{p}sxpose2 would create new variables " /// "___000vlist?, but names already in use " /// "please rename your variable ___000vlist before sxpose2"{p_end}" exit 110 } gen ___000vlist="`varlist'" qui split ___000vlist capture confirm variable _varname if !_rc { di as err "{p}sxpose2 would create new variables " /// "_varname, but names already in use ssc" /// "please rename your variable _varname before sxpose2"{p_end}" exit 110 } qui if "`varname'" != "" { gen _varname="" forval j = 1/`nvars' { replace _varname =___000vlist`j' in `j' } } qui if "`varlabel'" != "" { cap confirm variable _varlabel if !_rc { exit 110 } qui gen str1 _varlabel = "" local i 1 foreach var of varlist `varlist' { local lab: variable label `var' replace _varlabel = `"`lab'"' in `i' local i = `i' + 1 } } drop `varlist' if `nobs' > `nvars' qui keep in 1/`nvars' qui if "`firstnames'" != "" { forval j = 1/`nobs' { capture rename _var`j' `= _var`j'[1]' } drop in 1 } if "`destring'" != "" destring, replace drop ___000vlist* if ( "`varlabel'" != "" & "`varname'" != "" ){ capture order _varname _varlabel } if ( "`varlabel'" != "" & "`varname'" == "" ){ capture order _varlabel } if ( "`varlabel'" == "" & "`varname'" != "" ){ capture order _varname } end