Thank you Austin.
But your code will call summarize NxM times, where N and M are the
numbers of categories within each variable specified in by() and each
time summarize will look through the whole dataset. And this is where
the efficiency is lost. I believe there is only one loop through the
dataset necessary in this case, regardles of N and M.
I just hope you've had the code already and didn't devise it
specifically for my query.
Thank you, Sergiy Radyakin
On 5/8/08, Austin Nichols <[email protected]> wrote:
> Sergiy Radyakin <[email protected]>:
> Easier in Mata, perhaps, but still easy to put in an ado:
> _______________________________________
> prog tabmat
> version 8.2
> syntax varname [fw aw iw], by(varlist min=1 max=2) Matname(string) [replace]
> cap conf matrix `matname'
> if _rc!=111 & "`replace'"=="" {
> di as err "Matrix `matname' already defined;" _n "specify" _c
> di as txt " replace " as err "option to overwrite"
> error 110
> }
> cap matrix drop `matname'
> tokenize `by'
> tempvar iv jv
> tempname v
> egen long `iv'=group(`1')
> su `iv', meanonly
> loc maxi=r(max)
> egen long `jv'=group(`2')
> su `jv', meanonly
> loc maxj=r(max)
> forv j=1/`maxj' {
> su `2' if `jv'==`j', meanonly
> loc col: label (`2') `=r(mean)'
> loc colc: subinstr local col "." "`=char(183)'", all
> loc colnam `"`colnam' "`colc'""'
> }
> forv i=1/`maxi' {
> su `1' if `iv'==`i', meanonly
> loc row: label (`1') `=r(mean)'
> loc rowc: subinstr local row "." "`=char(183)'", all
> loc rownam `"`rownam' "`rowc'""'
> forv j=1/`maxj' {
> su `varlist' [`weight'`exp'] if `iv'==`i' & `jv'==`j', meanonly
> if r(N)>0 loc m=r(mean)
> else loc m=.
> mat `v'=nullmat(`v') , `m'
> }
> mat `matname'=nullmat(`matname') \ `v'
> mat drop `v'
> }
> matrix rownames `matname' = `rownam'
> matrix colnames `matname' = `colnam'
> matrix roweq `matname' = `1':
> matrix coleq `matname' = `2':
> mat li `matname'
> end
> _______________________________________
> sysuse auto, clear
> table rep78 head, c(mean price)
> tabmat price, by(rep78 head) mat(A)
>
> On Thu, May 8, 2008 at 10:16 AM, Sergiy Radyakin <[email protected]> wrote:
> > Hello Statalisters,
> >
> > I am looking for a way to get the matrix of means, which is displayed
> > but not saved by, e.g.:
> >
> > sysuse auto
> > table rep78 head, c(mean price)
> >
> > The (relatively new) svy commands allow this, but they are quite slow
> > for the purpose. -table- was in Stata for ages, but it still does not
> > save any matrix results.
> >
> > I am aware of an option replace, which saves the means in the dataset,
> > but it destroys the data, - something I am trying to avoid. Adding
> > preserve/restore will slow the program down sufficiently enough to
> > reject this way of doing it.
> >
> > Is it possible to obtain a matrix of means from table (or another
> > command with a similar functionality) (preferred) ? Or is it possible
> > to tell table,replace to keep the existing data and add the computed
> > statistics as new variables (good)?
> >
> > Note that tabstat does not allow what I am looking, since it only
> > supports one var in the by() clause, and I will need to call it N
> > times (where N is the number of categories in the second var) and
> > combine the columns together, which is not fast either.
> >
> > Also note, that while
> >
> > tabulate rep78 foreign, matcell(A)
> >
> > is a valid syntax,
> >
> > tabulate rep78 foreign, matcell(A) summarize(price) mean
> >
> > which presumably could be the solution I am looking for, is not valid:
> > r(198); option matcell() not allowed
> >
> > Any suggestions are welcomed.
> >
> > Thank you,
> > Sergiy Radyakin
> > *
> > * For searches and help try:
> > * http://www.stata.com/support/faqs/res/findit.html
> > * http://www.stata.com/support/statalist/faq
> > * http://www.ats.ucla.edu/stat/stata/
> >
> *
> * For searches and help try:
> * http://www.stata.com/support/faqs/res/findit.html
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
>
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/