*! conv2num--convert string var to numeric var (STB-29: dm40) *! Robert M. Farmer program define conv2num version 3.1 local varlist = "req ex min(1) max(1)" local options = "noCompress Generate(str) Label(str)" parse"`*'" local s "`varlist'" conf str var `s' local n "`generat'" if "`n'"=="" { local n "`s'" } conf new var x if "`label'"=="" { local label : var l `s' } local squash = "`compress'"=="" tempvar arg1 arg2 arg3 quietly { gen double `arg1' = real(`s') gen int `arg2' = 1 if `arg1' == . sum `arg2' if _result(1) ~= 0 { gen int `arg3' = index("1234567890.",substr(`s',`arg2',1)) > 0 while _result(1) ~= 0 { replace `arg3' = `arg2' if index("1234567890.",substr(`s',`arg2',1)) > 0 & `arg3' > 0 & `arg2' ~= . replace `arg2' = . if `arg2' > `arg3' replace `arg2' = `arg2' + 1 replace `arg2' = . if length(`s') < `arg2' sum `arg2' } replace `arg3' = . if `arg1' ~= . | `arg3' == 0 replace `arg1' = real(substr(`s',1,`arg3')) if `arg3' ~= . } if "`n'"=="`s'" { drop `s' } rename `arg1' `n' lab var `n' "`label'" if `squash' { compress `n' } } end