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: for loops in Mata


From   Nick Cox <njcoxstata@gmail.com>
To   "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu>
Subject   Re: st: for loops in Mata
Date   Tue, 29 Oct 2013 16:45:15 +0000

Developing this a bit, and correcting it:

Your data structure or shape is _wide_ in a jargon used by Stata's
-reshape-. You therefore need to loop over your variables.

But no other loop is needed. You can at the same time check whether
the year is relevant for each person and ignore it if it is not. Given
your definitions, I think you need

gen nmoves = 0
forval j = 1969/1997 {
      local jm1 = `j' - 1
      replace nmoves = nmoves + (municpality`j' != municpality`jm1') &
inrange(`j', yob_ind - 1968, yob_ind + 1988)
}

Nick
njcoxstata@gmail.com


On 29 October 2013 12:38, Nick Cox <njcoxstata@gmail.com> wrote:
> Sounds like
>
> gen nmoves = 0
> forval j = 1969/1997 {
>       local jm1 = `j' - 1
>       replace nmoves = nmoves + (municpality`j' != municpality`jm1') &
> inrange(`j', yob_ind - 2, yob_ind + 18)
> }
>
> Also -search rowwise, sj- in Stata to get a relevant review paper.
>
>
> Nick
> njcoxstata@gmail.com
>
>
> On 29 October 2013 11:07, Karina Corbett <Karina.Corbett@stami.no> wrote:
>> Dear Statalist members,
>>
>> I am using Stata 12 for Windows (and Stata 13 for Mac )
>>
>> I have a dataset with annual updates of the municipality in which people live for all individuals in a birth cohort (n=650 000). The follow-up period spans 30 years, and the variable names are in the format municipality1968, municipality1969, etc. I also have a variable for year of birth. I want is to generate a new variable that indicates how many times a person moved (between municipalities) from two years prior to birth to age 18. Perhaps there is an easier way of doing this (and if there is, I would be happy to know!), but I have tried using Mata interactively, and have run into a problem.
>>
>> The municipality variables are ordered in the dataset according to year of observation. I started off just checking whether first column differed from second, etc, and added +1 to an indicator variable (cum_move) each time they differed (each time a person moved).  So far so good. However, when I tried to restrict column range according to year of birth, so that for people born in 1970, I would only check columns 1-20, and for those born in 1971, I would check column numbers 2-21, etc, the program just runs seemingly forever (or until I stop it). I transformed year of birth into the variable "yob_ind" that takes on value 1 for person born in 1970, and 2 for person born in 1971, etc.
>>
>>
>> ds municpality*
>> local municpality `r(varlist)'
>> di"` municpality "
>>
>> mata
>> municpality =st_local("municpality ")
>> st_view(K=., ., tokens(municpality), "touse" )
>> st_view(cum=., .,("cum_mov"), "touse" )
>> st_view(yob=., .,("yob_ind"), "touse")
>>
>> for (i=1; i<=rows(K); i++) {
>>                for (j=yob[i]; j=(yob[i]+19); j++) {
>>                               if (K[i,j] != K[i,j+1])                                         {
>>                                             cum[i]= cum[i]+1
>>                                                                                          }
>>                                                                           }
>>                                                            }
>>
>> Does anyone know what I am doing wrong here? Is there a better way of solving this problem?
>> I am just starting out using Mata so apologies for poor style or  if I've left out important information.
>> Any advice would be greatly appreciated
>>
>> Karina
>>
>> --
>> Karina Corbett, MPhil
>> PhD student, Department of occupational medicine and epidemiology
>> National Institute of Occupational Health, Norway
>>
>>
>>
>> *
>> *   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