[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

st: Re: Foreach when dealing with a list of observations

From   "Michael Blasnik" <>
To   <>
Subject   st: Re: Foreach when dealing with a list of observations
Date   Sat, 29 Mar 2008 13:59:04 -0400


First, you are going about this in a very unStatalike manner -- you do not need a loop. Second, your use of foreach is clearly not following the allowed syntax as shown in help foreach (no -if- allowed).

Here is a non-looping way of doing this, assuming that mutcode is either 0 or 1:

by rin (mutcode): gen byte evermut=(mutcode[_N]==1)
drop if evermut

which can be reduced to just 1 line if you don't want to check through to be sure that the proper observations are flagged:
by rin (mutcode): drop if mutcode[_N]==1

This approach won't work if mutcode takes on missing values. In that case, you may want to look at egen functions like max and total which could easily identify groups that meet your criteria.

Michael Blasnik

----- Original Message ----- From: "Sander" <>
To: <>
Sent: Saturday, March 29, 2008 1:00 PM
Subject: st: Foreach when dealing with a list of observations


I was wondering if it's possible to go over a list of observations
with the foreach command. What I mean is the following: I have a data
set with persons identified by a (for the person) unique number,
called rin. However, when personal characteristics of the people in
the data set changed, a new record was made with the same
identification number. Now the problem is, that if certain
characteristics for a person have changed (which gives a mutation code
of 1 (mutcode==1)), I want that person out of the data set.

What I tried is the following. The list of identification numbers that
I want out of the dataset can be obtained by this command:
list rin if mutcode==1

However, I don't want to run "drop if rin==number" by hand, since
there are many observations. Therefore, I tried the following:
foreach x of l rin if mutcode==1 {
drop if rin=="`x'"

Which doesn't work, unfortunately. I tried some other commands as well:
foreach x of rin if mutcode==1 {
drop if rin=="`x'"


foreach x in l rin if mutcode==1 {
drop if rin=="`x'"

Which also don't work. I'm probably doing something very wrong here,
but I would really appreciate it if someone could take the time to
help me out with this.


*   For searches and help try:

© Copyright 1996–2017 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index