*! version 1.0.0 06/24/94 ssi6.2, STB-21 program define bstrap version 3.1 parse "`*'", parse(" ,") local prog "`1'" if "`prog'"=="" { di in red "program name required" exit 198 } mac shift local options /* */ Args(str) Cluster(str) Dots Reps(integer 50) SIze(integer -9)" parse "`*'" if (`size' == -9) { local size "_N" } else if (`size' <= 1) { di in red "size() invalid" exit 198 } quietly describe if _result(4)-20 < `reps' { di in red "insufficient memory (observations)" exit 901 } local ns = _result(1) if "`cluster'"!="" { _crcunab `cluster' local cluster "$S_1" } if "`dots'"=="" { local dots "*" } else local dots "noisily" /* initialization called even before saving in case initializer wants to load some data set */ global S_1 capture `prog' ? `args' if _rc { if _rc==199 { di in red "program `prog' not found or" di in red _quote "`prog' ?" _quote /* */ " attempted to execute an unrecognized command." exit 199 } di in red _quote "`prog' ?" _quote " returned:" error _rc /*NOTREACHED*/ } if "$S_1"=="" { di in red _quote "`prog' ?" _quote " did not set \$S_1" exit 198 } local vl "$S_1" /* end user initializer call */ di _n in gr "Bootstrap:" _n /* */ _col(10) "Program:" _col(30) in ye "`prog'" di in gr _col(10) "Arguments:" _col(30) in ye "`args'" _n di /* */ in gr _col(10) "Replications:" _col(30) in ye "`reps'" _n /* */ in gr _col(10) "Data set size:" _col(30) in ye "`ns'" tempfile master result if "`cluster'"!="" { tempvar CCOUNT tempfile BOOTIT1 BOOTCLS sort `cluster' quietly save `master', replace keep `cluster' quietly by `cluster': keep if _n==_N quietly save `BOOTCLS', replace quietly describe di in gr /* */ _col(10) "Cluster variables:" _col(30) in ye "`cluster'" /* */ _n /* */ in gr _col(10) "No. of clusters:" _col(30) in ye _result(1) local sfx "clusters" } else { quietly save `master', replace } di in gr _col(10) "Sample size:" _col(30) in ye "`size' `sfx'" postfile `vl' using `result' tempname i N quietly { scalar `i'=1 scalar `N'=`reps' while (`i' <= `N') { if "`cluster'"=="" { use `master', clear bootsamp `size' } else { use `BOOTCLS', clear bootsamp `size' sort `cluster' by `cluster': gen long `CCOUNT' = _N by `cluster': keep if _n==_N save `BOOTIT1', replace use `master', clear merge `cluster' using `BOOTIT1' keep if _merge==3 expand =`CCOUNT', replace drop _merge `CCOUNT' } `dots' di in gr "." _c `prog' `args' scalar `i' = `i' + 1 } `dots' di postclos use `result', clear global S_FN if "`cluster'"=="" { label data "`prog' bootstrap" } else { label data "`prog' clustered bootstrap" } } summ end