Bookmark and Share

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   Joe Canner <[email protected]>
To   "[email protected]" <[email protected]>
Subject   RE: st: do loops and mata
Date   Thu, 13 Mar 2014 15:14:22 +0000

Jonathan,

It sounds like what you need is a three-dimensional matrix (39x2x2).  As Nick hinted, you can achieve this in Mata with pointers.  I haven't done this myself, but it looks pretty straight-forward.  See one discussion of the method here: http://www.ssc.wisc.edu/sscc/pubs/4-26.htm, as well as in several Statalist threads (e.g., http://www.stata.com/statalist/archive/2006-06/msg00693.html ).  The UW-SSC example shows how to make each element in a matrix point to a vector, but you would probably want a vector (39x1) where each element points to a matrix (2x2).

All that said, it also doesn't seem like it would be that difficult to pull the 4x1 vector of interest out of your 39x4 matrix, and convert it to a 2x2 matrix on the fly, each time you needed to use it (perhaps using a function).  If you can share more about how you are using the 2x2 matrices, someone here can suggest more specific code.

Regards,
Joe Canner
Johns Hopkins University School of Medicine

-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of [email protected]
Sent: Thursday, March 13, 2014 10:36 AM
To: [email protected]
Subject: RE: st: do loops and mata

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/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index