Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: Macro substitution in Mata


From   [email protected] (William Gould, Stata)
To   [email protected]
Subject   Re: st: Macro substitution in Mata
Date   Mon, 26 Dec 2005 08:31:08 -0600

Partha Deb <[email protected]> writes, 

> I'm trying to create a number of matrices in Mata ordered, e.g., x1, x2, 
> ..., x7.  I'd like to set up a loop to create these.  If these were Stata 
> objects, I could do them quite easily, e.g., I might write something like
> 
>        forvalues i=1/7 {
>        	gen x`i' = `i'
>        }
> 
> but I can't seem to figure out how to do something similar within Mata.

Exactly right.  My first recommendation is to use subroutines and 
simply call seven times:

         mat_init(x1)
         mat_init(x2)
         ...
         mat_init(x7)

If Partha is absolutely determined to work in a loop, then she is going to 
have to learn about pointers.  The setup would be

         p = J(7, 1, NULL)
         p[1] = &x1
         p[2] = &x2
         ...
         p[7] = &x7

and then Partha could code things like 

         for (i=1; i<=7; i++) {
                 mat_init(*p[i])
         }

or

         for (i=1; i<=7; i++) {
                 *p[i] = J(4,4,0)
                 for (j=1; j<=4; j++) (*p[i])[j] = 1 
         }

In terms of initialization of p[], unless it was important to be able to 
refer to them by the names x1, x2, ..., x7, one could simply the setup to

         p = J(7, 1, NULL)
         for (i=1; i<=7; i++) p[i] = &J(0,0,.)

There are some problems for which pointers are wonderful solutions.  In a 
problem like this one, however, my guess is that pointers are not worth 
the effort.  

-- Bill
[email protected]
*
*   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/



© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index