Unless I'm misreading what you want, why don't you just use:
mat accum a1 a2 a3 [aw=e]
or some variant (aw=1/e?) that employs mat accum's weight option.
I think, for your problem's size (n=20,000), Nick's suggested solution
exceeds the limits of even Stata SE (which I think is 11,000 x 11,000 on
matrices).
Michael Blasnik
----- Original Message -----
From: "Nick Cox" <n.j.cox@durham.ac.uk>
To: <statalist@hsphsun2.harvard.edu>
Sent: Wednesday, October 02, 2002 2:38 PM
Subject: st: RE: matrix algebra
> Alfonso Miranda
> >
> > I need to calculate a matrix product that has the following form
> >
> > B = G'YG
> >
> > where G is a n x k matrix and Y is a n x n diagonal matrix.
> > My problem is:
> >
> > (a) G should be formed with information for some variables,
> > say, a1 a2 a3. I
> > have n observations for each variable.
> >
> > (a) I have the information of the diagonal of Y in variable
> > called e. So I
> > need to use e to create matrix Y.
> >
> > (b) n is very large (more than 20,000 observations) so it
> > is imposible to
> > create a nxn diagonal matrix with elements in the diagonal
> > entries in e.
> >
> > I guess I need to use something like:
> >
> > matrix glsaccum B = a1 a2 a3, glsmat(Y)
> >
> > But first I must define Y. Can anyone help me in this one?
>
> One way to do it
>
> . local n = _N
> . matrix Y = J(`n',`n',0)
> . forval i = 1 / `n' {
> . matrix Y[`i',`i'] = myvar[`i']
> . }
>
> Nick
> n.j.cox@durham.ac.uk
> *
*
* 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/