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: Mata looping question
From
Anna Reimondos <[email protected]>
To
[email protected]
Subject
Re: st: Mata looping question
Date
Tue, 18 Oct 2011 22:35:24 +1100
That's perfect. Thank you so much!
On Tue, Oct 18, 2011 at 9:53 PM, Nick Cox <[email protected]> wrote:
> Here's a one-liner
>
> : b = a[|2,2\ .,.|] , J(rows(a) - 1, 1,.) \ J(1, cols(a), .)
>
> I imagine that there are neater ways to do it.
>
> Nick
> [email protected]
>
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On Behalf Of Nick Cox
> Sent: 18 October 2011 11:37
> To: '[email protected]'
> Subject: RE: st: Mata looping question
>
> Here's one way to do it. This could be compressed. As before, no loops are needed.
>
> : a = (1, 1 , 0\ 0, 2, 1\ 0 , 1, 0\0 , 0 , 0)
>
> : a
> 1 2 3
> +-------------+
> 1 | 1 1 0 |
> 2 | 0 2 1 |
> 3 | 0 1 0 |
> 4 | 0 0 0 |
> +-------------+
>
> : b = a[|2,2\ .,.|]
>
> : b
> 1 2
> +---------+
> 1 | 2 1 |
> 2 | 1 0 |
> 3 | 0 0 |
> +---------+
>
> : b , J(rows(b),1,.)
> 1 2 3
> +-------------+
> 1 | 2 1 . |
> 2 | 1 0 . |
> 3 | 0 0 . |
> +-------------+
>
> : b \ J(1,cols(b),.)
> 1 2
> +---------+
> 1 | 2 1 |
> 2 | 1 0 |
> 3 | 0 0 |
> 4 | . . |
> +---------+
>
> : b = b , J(rows(b),1,.)
>
> : b = b \ J(1,cols(b),.)
>
> : b
> 1 2 3
> +-------------+
> 1 | 2 1 . |
> 2 | 1 0 . |
> 3 | 0 0 . |
> 4 | . . . |
> +-------------+
>
> Nick
> [email protected]
>
> Anna Reimondos
>
> Thanks very much for the reply that is very helpful..however I was
> hoping to shift the elements across the columns the other way if that
> makes sense.
>
> E.g. if matrix a is:
>
> c1 c2 c3
> r1 1 0 0
> r2 0 2 1
> r3 0 1 0
> r4 0 0 0
>
> then matrix b I want to look like:
>
> c1 c2 c3
> r1 2 1 .
> r2 1 0 .
> r3 0 0 .
> r4 . . .
>
> (To give a bit of context, the data I am working with has ages of
> women in the row e.g. 15, 16...45 and number of children at different
> ages e.g. 0,1,2,...15 in the columns . I am reverse ageing the data.
> So at r2,c2 it means in year T a woman aged 16 had 2 children aged 2.
> The b matrix is trying to get at year T-1. In that case she was 15 and
> had 2 children aged 1)
>
> On Tue, Oct 18, 2011 at 8:54 PM, Maarten Buis <[email protected]> wrote:
>> On Tue, Oct 18, 2011 at 11:37 AM, Anna Reimondos wrote:
>>> For example if I have one original matrix called 'a'
>>>
>>> matrix a=(1,0,0\0,2,1\0,1,0\0,0,0)
>>> matrix list a
>>>
>>> I then want to create another matrix 'b' which is equal to 'a' but
>>> where every element has been shifted up one row and across one column.
>>
>> I would not do that with a loop:
>>
>> *------------- begin example ----------------
>> mata
>> a=(1,0,0\0,2,1\0,1,0\0,0,0)
>> b = J(5,1,0), (a \ J(1,3,0))
>> b
>> end
>> *----------- end example ----------------
>> (For more on examples I sent to the Statalist see:
>> http://www.maartenbuis.nl/example_faq )
>>
>
>
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/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/statalist/faq
* http://www.ats.ucla.edu/stat/stata/