Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: do loops and mata
From
"Thomas, Anthony" <[email protected]>
To
[email protected]
Subject
Re: st: do loops and mata
Date
Thu, 13 Mar 2014 11:18:20 -0400
Hi Jonathan,
You could also try putting each matrix in an array in Mata. They
wouldn't have a nice naming system like Stata matrices do, but then
your code could be contained to Mata. Note that as Nick points out,
this may be needlessly complicated, but if you're interested in a Mata
only solution this is what I would do.
**************** CODE ****************
P = st_data( ., ("ee", "eu" ,"ue", "uu") ) P
// assuming P has 39 rows...?
M = J(1, 39, NULL)
for ( i=1; i<=rows(P) ;i++) {
P= P[i,.]
P
// store P in M
M[i] = &P
xi=rowshape( Pi, 2)
xi
}
****************** END ****************
The matrix M holds pointers to the 39 smaller matrices P1 - P39. These
pointers tell the computer where the 39 small matrices are stored in
the system's memory. Then you can ask Mata to retrieve one of the
matrices by doing the following:
// look at M
M
// not useful - just a bunch of memory junk
// get 34th matrix
*M[34]
Others may have a better solution, but this is just what came to mind.
Arrays are cool in general and come in handy in a variety of
situations.
Anthony
On Thu, Mar 13, 2014 at 10:36 AM, <[email protected]> wrote:
> Thanks again Nick. I'll persevere using the old command structure
>
> The reason I need the sequence of matrices is that my colleagues and I are writing a paper that involves decomposing the contribution of labour market transition probabilities to changes in the labour market stocks. After some algebra this essentially involves multiplying the sequence of transition probability matrices from t= 1 to t=t. So I need to refer specifically to each transition matrix at each period t and loop this because the calculation will be different at each t (involve a different set of matrices)
>
> Hope that makes things a little more transparent. Let me know if mata ever gets macros
>
> Jonathan
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On Behalf Of Nick Cox
> Sent: 13 March 2014 14:10
> To: [email protected]
> Subject: Re: st: do loops and mata
>
> The short answer is that there is no exact Stata equivalent, because Mata as such does not have macros. But although you did not specify an exact Mata equivalent, I guess the longer answer would depend on what you want to do with these matrices. It could be that you need something deeper, e.g. pointers or structures.
>
> Indeed, although it's always fair just to ask about language details as a matter of curiosity, I remain very puzzled why you want to do this. I've never wanted to do anything like this in Mata: that means no more than it says, and can be put down to narrowness of my experience, but it's why I am puzzled.
> Nick
> [email protected]
>
>
> On 13 March 2014 13:48, <[email protected]> wrote:
>> Dear Nick
>>
>> Thanks for the quick response. The commands is indeed almost
>> equivalent to vec (except I need to go from a 39X4 matrix to 39 2 by
>> 2 matrices rather than a column vector ) but I still need a loop to
>> extract the 39 separate matrices and label them differently
>>
>> I can do this in the old matrix sequence using the commands
>>
>> mkmat ee eu ue uu, matrix(P)
>> matrix list P
>>
>> local i=1
>> while `i'<=rowsof(P) {
>> matrix P`i'= P[`i',1...] /* loops to give 39 different 1 by 4 matrices of transition probabilities */
>> local i=`i'+1
>> }
>>
>> matrix list P1
>> matrix list P39
>>
>> but I was interested in doing the mata equivalent
>>
>> thanks again
>>
>> Jonathan Wadsworth
>>
>>
>> -----Original Message-----
>> From: [email protected]
>> [mailto:[email protected]] On Behalf Of Nick Cox
>> Sent: 13 March 2014 12:49
>> To: [email protected]
>> Subject: Re: st: do loops and mata
>>
>> This looks like a way of reinventing -stack-. Am I wrong?
>>
>> Nick
>> [email protected]
>>
>>
>> On 13 March 2014 12:34, <[email protected]> wrote:
>>
>>> As a novice to mata I'm trying to generate a set of 39 matrices using
>>> a loop - essentially extracting each row of a larger matrix P
>>> sequentially and then transforming the vector into a matrix using the
>>> rowshape command
>>>
>>> I've got as far as this - which does indeed scroll through a matrix P
>>> 39 times and extract a row at a time and writes to a mtrix Pi, but
>>> then it overwrites the matrix Pi each time so that I'm left with just
>>> one matrix called Pi at the end of the loop instead of 39 matrics
>>> called P1--P39
>>>
>>> Does anyone know how to adapt the code below to generate and store 39 different matrices named p1, p2, ..p39 ?
>>
>>> mata
>>>
>>>
>>> P = st_data( ., ("ee", "eu" ,"ue", "uu") ) P
>>>
>>> for ( i=1; i<=rows(P) ;i++) {
>>>
>>> Pi= P[i,.]
>>> Pi
>>>
>>> xi=rowshape( Pi, 2)
>>> xi
>>>
>>> }
>>>
>>> end
>>
>> *
>> * For searches and help try:
>> * http://www.stata.com/help.cgi?search
>> * http://www.stata.com/support/faqs/resources/statalist-faq/
>> * http://www.ats.ucla.edu/stat/stata/
>>
>> Please access the attached hyperlink for an important electronic
>> communications disclaimer: http://lse.ac.uk/emailDisclaimer
>>
>> *
>> * For searches and help try:
>> * http://www.stata.com/help.cgi?search
>> * http://www.stata.com/support/faqs/resources/statalist-faq/
>> * http://www.ats.ucla.edu/stat/stata/
>
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/faqs/resources/statalist-faq/
> * http://www.ats.ucla.edu/stat/stata/
>
> Please access the attached hyperlink for an important electronic communications disclaimer: http://lse.ac.uk/emailDisclaimer
>
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/faqs/resources/statalist-faq/
> * http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/