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]
st: for loops in Mata
From
Karina Corbett <[email protected]>
To
"[email protected]" <[email protected]>
Subject
st: for loops in Mata
Date
Tue, 29 Oct 2013 11:07:28 +0000
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/