Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: problem with forvalues loop

From   "Holly Heard" <>
To   <>
Subject   st: problem with forvalues loop
Date   Tue, 25 Feb 2014 10:37:54 -0600

Dear Statalisters (apologies for long post):

I have data on exams that high school students take in 2013. Each student
can take more than one exam. The data were originally long (one observation
per exam), but I reshaped it wide, so that I have one observation per
student. Variables pertaining to each exam are numbered 1 to 10, based on
the maximum number of exams taken by a student (most students took 3-4
exams, but one student took 10). There are multiple variables based on each
exam number: retgrade1-retgrade10 (grade student was in when took exam),
resc1-resc10 (scale score of exam), etc. I need to reorganize and rename
variables based on the subject of the exam (algebra, reading, etc.), which
is denoted by resubj1-resubj10, which is the subject category of the exam
(1=Algebra I, 2=Algebra 2, 4=Chemistry). There are 15 exam categories,
although as noted, a maximum of 10 exams were taken by any one student. 

I created a forvalues loop to go through each variable denoted by exam
number, and generate new variables based on subject number. My code is:

forvalues y=1/10  {
	forvalues s=1/15  {
	if `s'<10 {
   	 local s 0`s'
	gen retgrade`s'13=retgrade`y' if resubj`y'==`s' & rect`s'13==1
	gen resc`s'13=resc`y' if resubj`y'==`s' & rect`s'13==1

Here, y denotes exam number 1-10, and s denotes subject number 1-15. I add
13 to the end of the new variables to denote the year of data collection,
and to distinguish new vars from old vars. It is possible for a student to
have taken an exam for a particular subject twice (if they didn't pass the
first time), so I create new variables only if the student took the subject
exam only once (rect`s'13==1).  

This loop runs many times, based on the many *(23851 missing values
generated)* statements I get, but then I get the following error:

retgrade0113 already defined

So apparently the loop repeats itself at some point. I realize that y and s
are not fully nested (that would be too easy), but I'm not sure how else to
write the code to do what I want to do. I tried reversing the order of the
forvalues commands (y within s), but get the same error. As far as I can
tell, I should only have one retgrade0113 as long as rect0113==1. Can anyone
tell me what I'm doing wrong and how to fix it? Thanks, Holly

Holly E. Heard, Ph.D.
Senior Social Scientist
HERC Data Specialist
Houston Education Research Consortium, MS-28
Rice University
6100 Main Street
Houston, TX 77005
Phone: 713-348-3415
Fax: 713-348-5296

*   For searches and help try:

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