program define predsim, rclass *! v 1.4 feb 20 02 gmh version 7 syntax varname [if] [in] [aweight fweight], Numlist(numlist) [Predict(str) GRaph GOpt(str) REPLACE(str) GENerate(str) Format(str)] numlist "`numlist'" preserve if "`generate'"~="" { confirm new variable `generate'_base } tempvar touse mark `touse' `if' `in' if `"`replace'"'~="" { gettoken cmd rest :replace, p("\") while `"`cmd'"'~="" { local replist "`replist'`cmd';" gettoken cmd rest :rest , p("\") while `"`cmd'"'=="\" { gettoken cmd rest :rest , p("\") } } } tempvar base local i =1 qui predict `base', `predict' foreach val of numlist `numlist' { tempvar sim`i' qui replace `varlist'=`val' *** parse REPLACE option if `"`replace'"'~="" { gettoken cmd rest :replace, p("\") while `"`cmd'"'~="" { qui `cmd' gettoken cmd rest :rest , p("\") while `"`cmd'"'=="\" { gettoken cmd rest :rest , p("\") } } } qui predict `sim`i'' , `predict' local val`i'=`val' local i = `i'+1 } if "`format'"=="" { local format "%6.4f" } local rownames "base" di "" di in gr "Table of Predicted Values" di in gr _dup(25) "-" di " " di in gr " Dependent Variable: " in ye _col(25) e(depvar) di in gr " Independent Variable: " in ye _col(25) "`varlist' " in gr " = " in ye `"`numlist'"' if `"`predict'"' == "" { local lab : variable label `base' local predict = " [`lab'] " } di in gr " Prediction: " _col(25) in ye "`predict' " di in gr " Command: " _col(25) in ye "`e(cmd)' " if `"`weight'"'~="" { di in gr " Weight: " _col(25) in ye "[`weight'`exp'] " } if `"`replace'"'~="" { di in gr " Replacing: " _col(25) in ye "|`replist'|" } di " " sum `base' [`weight'`exp'] if `touse', mean tempname mean scalar `mean' = r(mean) di in ye " base" in gr _col(20) "| " in ye _col(22) `format' `mean' sum `varname' if `touse', mean local basem = r(mean) if `"`generate'"'~="" { qui gen `generate'_base = `base' label var `generate'_base "Prediction at baseline" } tempname preds mat `preds' = `basem' , `mean' di in gr " "_dup(26) "-" local num = `i'-1 *** LOOP OVER THE NUMLIST local i =1 while `i'<=`num' { sum `sim`i'' [`weight'`exp'] if `touse', mean scalar `mean' = r(mean) di in gr " `varlist' = " in ye "`val`i'' " in gr _col(20) "| " in ye _col(22) `format' `mean' if `"`generate'"'~="" { qui gen `generate'_`i'= `sim`i'' label var `generate'_`i' "Prediction at `varlist' = `val`i''" } local rownames "`rownames' sim`i'" mat `preds' = `preds' \ `val`i'' , `mean' local i = `i'+1 } di " " if `"`graph'"' ~="" { collapse (mean) `sim1'-`sim`num'' xpose, clear local i = 1 qui gen `varlist' = . while `i'<=`num' { qui replace `varlist' = `val`i'' in `i' local i = `i'+1 } label var v1 "`lab'" gr v1 `varlist' , `gopt' } mat colnames `preds' = value prediction mat rownames `preds' = `rownames' return scalar num = `num' return local numlist "`numlist'" if "`weight'"~="" { return local weight "`weight' `exp'" } return matrix p `preds' return local replace "`replace'" if "`generate'"~="" { keep `generate'_base `generate'_1 - `generate'_`num' tempfile newvars qui save `newvars', replace restore tempvar merge qui merge using `newvars' , _merge(`merge') } else { restore } end