program define gather version 12.1 syntax varlist[, variable(string) value(string) label(string)] if "`variable'"==""{ local variable variable } if "`value'"==""{ local value value } cap confirm new variable `variable' if _rc{ di as error "variable `variable' already exists. Change default name of new variable with option variable()" exit } cap confirm new variable `value' if _rc{ di as error "variable `value' already exists. Change default name of new variable with option value()" exit } qui ds `varlist' local varlist `r(varlist)' cap ds ____* if _rc == 0 { display as error "Please rename variables staring with ____ first" exit 4 } local i = 0 qui ds `varlist', not local ivar `r(varlist)' display "`ivar'" if "`ivar'" ~= ""{ cap bys `ivar': assert _N == 1 if _rc { display as error "key variables do not uniquely identify the observations" exit 4 } } else{ tempvar ivar gen `ivar' = 1 } tempname tempdup local names "" foreach v in `varlist'{ local i = `i'+1 local l`i' : variable label `v' rename `v' ____`i' } cap reshape long ____, i(`ivar') j(`variable') string if _rc{ if _rc== 103{ display as error "too many variables specified" } else{ display as error "reshape terminated with error" } reshape long ____, i(`ivar') j(`variable') string local i = 0 foreach v in `varlist'{ local i = `i'+1 rename ____`i' `v' } display as error "reshape terminated with error" exit _rc } else{ rename ____ `value' tokenize `varlist' local i = 0 if "`label'"~=""{ gen `label'="" order `ivar' `variable' `label' `value' local i = 0 foreach name in `varlist'{ local i = `i'+1 qui replace `label' = "`l`i''" if `variable' == "`i'" } } local i =0 foreach name in `varlist'{ local i = `i'+1 qui replace `variable' = "``i''" if `variable' == "`i'" } } end