program define resample *! version 1.1.1 STB-37 ip18 qui version local i = max(4, _result(1)) version `i'.0 /* use Version 5.0, if possible */ local varlist "req ex min(1)" local if "opt" local in "opt" local options "Names(string)" parse "`*'" parse "`varlist'", parse(" ") tempvar use quietly { mark `use' `if' `in' count if `use' if !_result(1) { error 2000 } local N1 = _result(1) count if `use' in 1/`N1' local sort = (_result(1) != `N1') if `sort' { tempvar indx gen long `indx' = _n compress `indx' replace `use' = -`use' sort `use' } tempvar ix gen long `ix' = 1 + int(`N1'*uniform()) in 1/`N1' compress `ix' local i 1 while "``i''" != "" { local xname : word `i' of `names' if "`xname'" == "" { local xname = substr("``i''", 1, 7) + "_" if "`xname'" == "``i''" { local xname = upper("``i''") if "`xname'" == "``i''" { local xname = lower("``i''") } } } capture confirm new variable `xname' if _rc { replace `xname' = ``i''[`ix'] } else { local sz : type ``i'' gen `sz' `xname' = ``i''[`ix'] in 1/`N1' local sz : val lab ``i'' if "`sz'" != "" { lab val `xname' `sz' } } lab var `xname' "Random resample of ``i''" local i = `i' + 1 } if `sort' { sort `indx' } } end