*! 1.0.0 NJC 11 December 2000 program define _gmsub version 6.0 gettoken type 0 : 0 gettoken g 0 : 0 gettoken eqs 0 : 0 syntax varlist(max=1 string) [if] [in], /* */ Find(str asis) [ Replace(str asis) N(int -1) Word ] local fcn = cond("`word'" != "", "subinword", "subinstr") * doesn't work => user needs to update Stata capture local bar = `fcn'("foo","foo","bar",.) if _rc { di in r "Your version of Stata doesn't recognise `fcn'( )." di in r "I guess that you need to update." exit 198 } local nfind : word count `find' local nrepl : word count `replace' if `nrepl' == 0 { /* no replacement => delete */ local nrepl = `nfind' } else if `nrepl' == 1 { /* many to one replacements allowed */ local nrepl = `nfind' local replace : di _dup(`nfind') `"`replace' "' } else if `nfind' != `nrepl' { di in r "number of find and replace arguments not equal" exit 198 } marksample touse, strok local type "str1" /* ignores type passed from -egen- */ local n = cond(`n' == -1, ., `n') quietly { gen `type' `g' = "" replace `g' = `varlist' if `touse' local i = 1 while `i' <= `nfind' { local f : word `i' of `find' local r : word `i' of `replace' replace `g' = `fcn'(`g', `"`f'"', `"`r'"', `n') local i = `i' + 1 } } end