*! version 1.5.0 16aug1995 program define accrue version 4.0 local cmd "`1'" mac shift local arg "`*'" if "`cmd'"=="cmd" { global S_A_cmd "`arg'" exit } else if "`cmd'"=="by" { local nw : word count `arg' local i 1 while `i' <= `nw' { local v : word `i' of `arg' capture confirm var `v' if _rc { di in red "`v' is not an existing variable" exit 198 } local i = `i'+1 } global S_A_by "`arg'" exit } else if "`cmd'"=="macros" { global S_A_mac "`arg'" exit } else if "`cmd'"=="mnames" { global S_A_mna "`arg'" exit } else if "`cmd'"=="coeffs" { global S_A_coe "`arg'" local varlist "opt ex" parse "$S_A_coe" global S_A_coe "`varlist'" exit } else if "`cmd'"=="cnames" { global S_A_cna "`arg'" exit } else if "`cmd'"=="stderrs" { global S_A_std "`arg'" local varlist "opt ex" parse "$S_A_std" global S_A_std "`varlist'" exit } else if "`cmd'"=="snames" { global S_A_sna "`arg'" exit } else if "`cmd'"=="results" { global S_A_res "`arg'" exit } else if "`cmd'"=="rnames" { global S_A_rna "`arg'" exit } else if "`cmd'"=="using" { global S_A_fna "`arg'" exit } else if "`cmd'"=="exec" { parse "`arg'", parse(" ") local noisily 0 local repflag 0 local msgflag 1 local i 1 while "``i''"!="" { if "``i''"==substr("noisily",1,length("``i''")) { local noisily 1 } if "``i''"=="replace" { local repflag 1 } if "``i''"=="nomsg" { local msgflag 0 } local i = `i'+1 } if "$S_A_cmd"=="" { noi di in red "no command to execute" exit 198 } acccmd `repflag' `noisily' `msgflag' exit } else if "`cmd'"=="clear" { global S_A_by global S_A_mac global S_A_mna global S_A_coe global S_A_cna global S_A_std global S_A_sna global S_A_res global S_A_rna global S_A_fna global S_A_cmd exit } else if "`cmd'"=="query" { di if "$S_A_by"!="" { di in white "by: " in ye "$S_A_by" } if "$S_A_mac"!="" { di in white "macros: " in ye "$S_A_mac" } if "$S_A_mna"!="" { di in white "mnames: " in ye "$S_A_mna" } if "$S_A_coe"!="" { di in white "coeffs: " in ye "$S_A_coe" } if "$S_A_cna"!="" { di in white "cnames: " in ye "$S_A_cna" } if "$S_A_std"!="" { di in white "stderrs: " in ye "$S_A_std" } if "$S_A_sna"!="" { di in white "snames: " in ye "$S_A_sna" } if "$S_A_res"!="" { di in white "results: " in ye "$S_A_res" } if "$S_A_rna"!="" { di in white "rnames: " in ye "$S_A_rna" } if "$S_A_fna"!="" { di in white "using: " in ye "$S_A_fna" } if "$S_A_cmd"!="" { di in white "cmd: " in ye "$S_A_cmd" } exit } else { di di in white "Usage: " di in ye " accrue cmd STATA_COMMAND" di in ye " accrue by VARLIST" di in ye " accrue macros MACROLIST" di in ye " accrue mnames VARLIST" di in ye " accrue results INTEGERLIST" di in ye " accrue rnames VARLIST" di in ye " accrue using FILENAME" di in ye " accrue exec [replace noisily] di in ye " accrue query" exit } end program define acccmd version 4.0 local repflag "`1'" local noisily "`2'" local msgflag "`3'" if `noisily' == 0 { local nnn "quietly" } else local nnn "noisily" fixnames if "$S_A_mac"!="" { local nmac : word count $S_A_mac local nmna : word count $S_A_mna if `nmac'!=`nmna' { di in red "names and macros do not match" exit 198 } } if "$S_A_res"!="" { local nres : word count $S_A_res local nrna : word count $S_A_rna if `nres'!=`nrna' { di in red "names and results do not match" exit 198 } } if "$S_A_coe"!="" { local ncoe : word count $S_A_coe local ncna : word count $S_A_cna if `ncoe'!=`ncna' { di in red "names and coeffs do not match" exit 198 } } if "$S_A_std"!="" { local nstd : word count $S_A_std local nsna : word count $S_A_sna if `nstd'!=`nsna' { di in red "names and stderrs do not match" exit 198 } } if "$S_A_mac"=="" & "$S_A_res"=="" & "$S_A_coe"=="" & "$S_A_std"=="" { di in blue "proceeding, but no statistics specified to accrue" } if "$S_A_by"=="" { di in red "nothing to accrue by" exit 198 } if "$S_A_fna"=="" { local fname "" } else { local fname "$S_A_fna" } if "`fname'"!="" { noi di in blue "posting results to: " in ye "`fname'" } local rr "" if "`repflag'"=="1" { local rr "replace" } tempname pst *noi di in red "Postname: `pst'" quietly { if "`fname'"!="" { postfile `pst' $S_A_by $S_A_mna $S_A_rna $S_A_cna /* */ $S_A_sna using `fname', double `rr' } tempvar tgr egen `tgr'= group($S_A_by) summ `tgr' local ngr = _result(6) local n = index("$S_A_cmd"," if ") local nm1 = `n'-1 local np4 = `n'+4 local c = index("$S_A_cmd",",") local cm1 = `c'-1 local i 1 while `i' <= `ngr' { if `n' > 0 { local ttt substr("$S_A_cmd",1,`nm1') local cmd "`ttt' if `tgr'==`i' & " local ttt substr("$S_A_cmd",`np4',.) local cmd "`cmd' `ttt'" } else if `c'>0 { local ttt substr("$S_A_cmd",1,`cm1') local cmd "`ttt' if `tgr'==`i'" local ttt substr("$S_A_cmd",`c',.) local cmd "`cmd' `ttt'" } else { local cmd "$S_A_cmd if `tgr'==`i'" } if `msgflag'==1 { local nbys : word count $S_A_by parse "$S_A_by", parse (" ") local arglist "" local bylist "" local z 1 while `z'<=`nbys' { qui summ ``z'' if `tgr'==`i' tempname byval`z' scalar `byval`z'' = _result(3) local bval = _result(3) local arglist "`arglist' `byval`z''" local bylist "`bylist'``z''=`bval' " local z = `z'+1 } noi di in blue "`bylist'" } tempfile ttt save `ttt' capture `nnn' `cmd' use `ttt', clear if "`fname'"!="" { noisily accpost `pst' `tgr' `i' } local i = `i'+1 } if "`fname'"!="" { postclose `pst' } } end program define fixnames version 4.0 if "$S_A_coe"!="" { if "$S_A_cna"=="" { global S_A_cna "$S_A_coe" } } if "$S_A_std"!="" { if "$S_A_sna"=="" { global S_A_sna "$S_A_std" } } local j 1 while `j'<=4 { if `j'==1 { local args : word count $S_A_mna local nlist "mnames list" } if `j'==2 { local args : word count $S_A_rna local nlist "rnames list" } if `j'==3 { local args : word count $S_A_cna local nlist "cnames list" } if `j'==4 { local args : word count $S_A_sna local nlist "snames list" } local i 1 while `i'<=`args' { capture confirm var `w1' if _rc == 0 | _rc == 111 { capture confirm new var `w1' if _rc { noi di in red /* */ "illegal variable name (`w1') in `nlist'" exit 198 } } local i = `i'+1 } local j = `j'+1 } local args "$S_A_mna $S_A_rna $S_A_cna $S_A_sna" local nargs : word count `args' local i 1 while `i' < `nargs' { local w1 : word `i' of `args' local j = `i'+1 while `j'<=`nargs' { local w2 : word `j' of `args' if "`w1'"=="`w2'" { noi di in red /* */ "`w1' appears more than once in the names lists" exit 198 } local j = `j'+1 } local i = `i'+1 } end program define accpost version 4.0 local pst "`1'" local tgr "`2'" local run = `3' local nbys : word count $S_A_by local nmac : word count $S_A_mac local nres : word count $S_A_res local ncoe : word count $S_A_coe local nstd : word count $S_A_std local arglist "" parse "$S_A_mac", parse(" ") local i 1 while `i'<=`nmac' { if substr("``i''",1,1) == "_" { tempname mval`i' capture scalar `mval`i'' = ``i'' if _rc != 0 { noi di in blue " ``i'' unavailable" scalar `mval`i'' = . } local arglist "`arglist' `mval`i''" } else { tempname mval`i' capture scalar `mval`i'' = ${``i''} if _rc != 0 { noi di in blue " ``i'' unavailable" scalar `mval`i'' = . } local arglist "`arglist' `mval`i''" } local i = `i'+1 } parse "$S_A_res", parse(" ") local i 1 while `i'<=`nres' { tempname rval`i' if substr("``i''",1,1) != "_" { capture scalar `rval`i'' = _result(``i'') } else { capture scalar `rval`i'' = ``i'' } if _rc != 0 { noi di in blue " ``i'' unavailable" scalar `rval`i'' = . } local arglist "`arglist' `rval`i''" local i = `i'+1 } parse "$S_A_coe", parse(" ") local i 1 while `i'<=`ncoe' { tempname cval`i' capture scalar `cval`i'' = _b[``i''] if _rc != 0 { noi di in blue " ``i'' unavailable" scalar `cval`i'' = . } local arglist "`arglist' `cval`i''" local i = `i'+1 } parse "$S_A_std", parse(" ") local i 1 while `i'<=`nstd' { tempname sval`i' capture scalar `sval`i'' = _se[``i''] if _rc != 0 { noi di in blue " ``i'' unavailable" scalar `sval`i'' = . } local arglist "`arglist' `sval`i''" local i = `i'+1 } parse "$S_A_by", parse (" ") local blist "" local i 1 while `i'<=`nbys' { qui summ ``i'' if `tgr'==`run' tempname byval`i' scalar `byval`i'' = _result(3) local blist "`blist' `byval`i''" local i = `i'+1 } local arglist "`blist' `arglist'" post `pst' `arglist' end