Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

RE: st: data loop question


From   "Bauldry, Shawn" <Sbauldry@ppv.org>
To   <statalist@hsphsun2.harvard.edu>
Subject   RE: st: data loop question
Date   Wed, 11 May 2005 15:33:22 -0400

Thanks, this works well.

-Shawn

-----Original Message-----
From: owner-statalist@hsphsun2.harvard.edu
[mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Eric G. Wruck
Sent: Wednesday, May 11, 2005 3:04 PM
To: statalist@hsphsun2.harvard.edu
Subject: Re: st: data loop question

Ok, here's a way of doing it: I made up a little example & wrote some
code.  This looks like it'll work:

. l

     +--------------+
     | x1   x2   x3 |
     |--------------|
  1. |  1    2    3 |
  2. |  7    5    4 |
  3. | 10   34   18 |
  4. | 16   12   16 |
     +--------------+

. gen maxX = 0

.
. egen max = rowmax(x*)

.
. forvalues i = 1(1)3 {
  2.   replace maxX = `i' if x`i' == max
  3.   }
(2 real changes made)
(1 real change made)
(2 real changes made)

.  
. l

     +---------------------------+
     | x1   x2   x3   maxX   max |
     |---------------------------|
  1. |  1    2    3      3     3 |
  2. |  7    5    4      1     7 |
  3. | 10   34   18      2    34 |
  4. | 16   12   16      3    16 |
     +---------------------------+

.   
.
However, you need to watch out for at least two things: (1) ties & (2)
missing values.  The code I wrote takes the last maximum tie as the
variable of interest -- that is, in observation 4, x3 is determined to
hold the max even though x1 holds the same value.  Missing values are
effectively treated as positive infinity, so you may have to control for
that separately -- this depends in part on what egen does with missing
values.

Hope this helps,

Eric



>Statalist,
>
>I have a series of variables, say x1-x10, and I would like to determine
>the numeric suffix associated with the variable that has the maximum
>value for each case.  For example, maybe x9 has the max for case 1 and
>x7 has the max for case 2, then I would like to end up with a variable,
>say MaxX, that has a 9 and 7 for the first two cases respectively.  I
>think a data loop is the way to go, but I've tried working out a loop
to
>do this and it's not coming to me.
>
>
>Thanks,
>Shawn



-- 

===================================================

       Eric G. Wruck
       Econalytics
       2535 Sherwood Road
       Columbus, OH  43209

       ph:      614.231.5034
       cell:    614.330.8846
       eFax:    614.573.6639
       eMail:   ewruck@econalytics.com
       website: http://www.econalytics.com

====================================================
*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/



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