*! version 1.1.0 PR 26Feb1999. STB-50 sg112.1 program define frac_ext version 6 /* Extract values (e.g. powers, initial values) for individual variables. 1 = x-variables, 2 = value_string, 3 = name (e.g. init), 4 (optional) = separator. Example: fracext "rhs'" "`init'" init \ */ local rhs "`1'" local target "`2'" local tname "`3'" local sep "`4'" if "`sep'"=="" { local sep "," } unabbrev `rhs' local rhs `s(varlist)' local nx: word count `rhs' local j 0 while `j'<`nx' { local j=`j'+1 local n`j': word `j' of `rhs' } quietly { tokenize "`target'", parse("`sep'") local ncl 0 /* # of comma-delimited clusters */ while "`1'"!="" { if "`1'"=="`sep'" { mac shift } local ncl=`ncl'+1 local clust`ncl' "`1'" mac shift } if "`clust`ncl''"=="" { local ncl=`ncl'-1 } if `ncl'>`nx' { noi di in red "too many sets of `tname'() values specified" exit 198 } /* Disentangle each varlist:string cluster */ local i 1 while `i'<=`ncl' { tokenize "`clust`i''", parse("=:") if "`2'"!=":" & "`2'"!="=" { if `i'>1 { noi di in red /* */ "invalid `tname'() value `clust`i''" /* */ ", must be first item" exit 198 } local 2 ":" local 3 `1' local j 0 local 1 while `j'<`nx' { local j=`j'+1 local 1 `1' `n`j'' } } local arg3 `3' unabbrev `1' tokenize `s(varlist)' while "`1'"!="" { frac_in `1' "`rhs'" local val`s(k)' `arg3' mac shift } local i = `i'+1 } * transfer values to $S_* local j 0 while `j'<`nx' { local j=`j'+1 global S_`j' `val`j'' } } end