Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, is already up and running.

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

Re: st: a loop error of -foreach-

From   Ulrich Kohler <>
Subject   Re: st: a loop error of -foreach-
Date   Fri, 17 Sep 2010 11:28:04 +0200

Am Freitag, den 17.09.2010, 08:49 +0000 schrieb Grace Jessie:
> Dear statalists,
> I encountered a loop problem.
> The commands I edited are as follwows.
> foreach j in a b c d {
> foreach i in e f g {
> if `j'==b {
> count
> }
> else {
> su
> }
> }
> }
> Sometimes the error was showed "b ambiguous abbreviation",sometimes
> the error was "type mismatch".
> What is wrong?
> In my mind, -foreach lname in- can be followed by any_list.
> Thank you for any explanation!

-foreach lname in- can, as you said, followed by any list. However you
need to control that what is in the list makes sense to the commands
inside the loop. In your case the elements of the lists are interpreted
as (abbreviations of) variable names in the if-condition. The variable
name "b" is ambiguous if more than one variable exists starting with
"b". You encounter a type mismatch if only one such variable exists but
that variable is a numeric variable (which you compare with the string
b). Perhaps you might want to code

if "`j'" == "b" {

Leaving this asside your branch is a bit ill treated. Using a branch
such as this

. sysuse auto
. if foreign = 1 {
.	count
. }

checks whether the first observation of foreign contains 1. If it is the
case, all observations are counted. Hence, the result of the code above
depends on the sort order of the data set, which is not what you
normally want to do. 


if "`j'"=="b" {

> Best regards,
> Grace
> *
> *   For searches and help try:
> *
> *
> *

*   For searches and help try:

© Copyright 1996–2016 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index