Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Karina Corbett <Karina.Corbett@stami.no> |
To | "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu> |
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/