*! 1.0.0 gmh dec 11 98 capture program drop quiktbl program define quiktbl /* varlist with possible crosses list*row , stat() */ qui{ parse "`*'", p(",") local varlist="`1'" parse "`3'", p("()") local stat="`3'" local i =1 local var: word `i' of `varlist' * generate list of tables while "`var'"~="" { if index("`var'","*")==0 { local rowlist="`rowlist' `var' 0" } else { parse "`var'",p("*") local rowlist="`rowlist' `1' `3'" } local i = `i' + 1 local var: word `i' of `varlist' local numvar=`numvar'+1 } * generate strings representing the list of statistics local i =1 local tempst: word 1 of `stat' local iter=1 local count = 1 while "`tempst'"~="" { if "`tempst'"=="freq" { local s`iter' = "`s`iter'' freq" } else { local s`iter' = "`s`iter'' `tempst'" local i = `i'+1 local tempst: word `i' of `stat' local s`iter' = "`s`iter'' `tempst'" } local count=`count' + 1 if `count' == 6 { local count = 1 local ct`iter' = 5 local iter=`iter'+1 } local i = `i' + 1 local tempst: word `i' of `stat' } local ct`iter'=`count'-1 local numtbl=`iter' ** START THE TABLE OUTPUT ** preserve local vj=1 /* vj is table */ local tbl:word `vj' of `rowlist' while `vj'/2<`numvar' { /* start table loop */ restore,preserve local aggct=0 local vj2=`vj'+1 local byvar:word `vj2' of `rowlist' if "`byvar'"=="0" { local by="" local byvar="" } else { local by="by(`byvar')" } local i=1 * START THE TABLE PORTION LOOPS * while `i'<=`numtbl' { /* i is number of table portion */ restore,preserve table `tbl' , `by' c(`s`i'') replace if `i'==1 { local Vtyp: type `tbl' if substr("`Vtyp'",1,3)=="str" { gen str20 label ="`tbl': "+ `tbl' } else { gen str20 label = "`tbl':" + string(`tbl') } if "`byvar'"~="" { local Vtyp: type `byvar' if substr("`Vtyp'",1,3)=="str" { replace label="by(`byvar':" + `byvar' + ") " + label } else { replace label="by(`byvar':" + string(`byvar')+ ") " + label } } } local k=1 while `k'<=`ct`i'' { local j=`k'+`aggct' rename table`k' c`j' local k = `k'+1 } tempfile f`i' save `f`i'' local aggct=`aggct'+`ct`i'' local i = `i'+1 } /* end loop over i */ use `f1' local ic=2 while `ic'<=`numtbl' { merge using `f`ic'' drop _merge local ic=`ic'+1 } local i = int(`vj'/2)+1 tempfile a`i' drop `tbl' `byvar' save `a`i'' local vj=`vj'+2 local tbl:word `vj' of `rowlist' } /* end loop over table vars */ use `a1' * append 'em local ic=2 while `ic'<=`numvar' { count append using `a`ic'' local ic=`ic'+1 } restore, not order label compress local getout=0 local i=1 global colhead while `getout'==0 { capture confirm variable c`i' if _rc==111 { local getout=1 } else { local head: variable label c`i' di global colhead= "$colhead `head'" } local i=`i' +1 } } end