<>
I think it is the appropriate way to end the thread. If you answered them all individually, it would only increase the traffic on the list w/o adding to the insights gained from this thread.
HTH
Martin
-------- Original-Nachricht --------
> Datum: Thu, 19 Mar 2009 08:05:44 +0100
> Von: [email protected]
> An: [email protected]
> Betreff: RE: st: bys and [_N] within replace
> Johannes,
>
> Yes, now both yours and Eva's code produces the same result. Thank you for
> the help solving my problem. You do mention that Evas code do not need to
> be sorted by the time variable, and in this particular example it does not
> matter. Though, if I understand Nick Cox correct, it does not hurt either,
> and may occasionally prevent from being biten.
>
> Also, thanks to Johannes, Eva and Nick for giving additional advice about
> how interpret _N and _n to look within observations in a bysort, and for
> further coding advice. Very helpful. Stata (and Statalist!) never fails to
> impress.
>
> As a sidenote. Including Johannes posting on this matter I received three
> answers to this posting. Is this the approriate way to end the thread, or
> is it more appropriate to answer all individual postings?
>
> Thanks for your consideration.
>
> Best wishes,
> Alexander Severinsen
>
> -----Opprinnelig melding-----
> Fra: [email protected]
> [mailto:[email protected]] På vegne av Johannes Geyer
> Sendt: 18. mars 2009 14:30
> Til: [email protected]
> Emne: RE: st: bys and [_N] within replace
>
> > I tried your code as well, but it does not replicate the above
> > solution, most likely because my statement of the problem was
> > unclear. Sorry about that.
>
> No, I think that I made an error. I implicitly assumed in my code that
> each individual would have an occurrence of "TM Ei-svar" - which might not
> be correct.
>
> The following code should produce the same results as Eva's code:
>
> *******************************
> bys Id Result2: gen helpvar = _n == 1
> egen kun_eisvar = total(helpvar), by(Id)
> replace kun_eisvar = kun_eisvar == 1 & Result2 == "TM Ei-svar"
> drop helpvar
> *******************************
>
> Note that it is not necessary to sort by the time variable. Eva's code
> could be written as:
>
> *******************************
> gen other = Result2 != "TM Ei-svar"
> bysort Id : replace other = sum(other)
> by Id : gen dummy = other[_N]==0
> *******************************
>
> > I am still puzzled about why my code did not work. I thought that I
> > could use _N to look forward and _N-1 to look backwards, within Id
> > and Commdate.
>
> "_N" simply contains the total number of observations in the dataset or in
> your "by id - group". So -[_N-1]- used as an index means that you refer
> to the second last observation in the group you are looking at. And -[_N]-
> is the last observation. So you don't step through all observations of an
> id if you have more than two realizations of it.
>
>
> Johannes
>
>
> [email protected] schrieb am 18/03/2009 14:05:15:
>
> > Johannes, thanks for this.
> >
> > Eva Poen gave me this code,
> >
> > gen other = Result2 != "TM Ei-svar"
> > bysort Id (Commdate) : replace other = sum(other)
> > by Id (Commdate) : gen dummy = other[_N]==0
> > drop other
> >
> > which works fine.
> >
>
> >
> > I am still puzzled about why my code did not work. I thought that I
> > could use _N to look forward and _N-1 to look backwards, within Id
> > and Commdate.
> >
> > Anyway, problem solved. Thanks for the help.
> >
> > Best wishes,
> > Alexander Severinsen
> >
> >
> > -----Opprinnelig melding-----
> > Fra: [email protected] [mailto:owner-
> > [email protected]] På vegne av Johannes Geyer
> > Sendt: 18. mars 2009 11:28
> > Til: [email protected]
> > Emne: Re: st: bys and [_N] within replace
> >
> > you could do the following:
> >
> > bys Id Result2: gen helpvar = _n == 1
> > egen kun_eisvar = total(helpvar), by(Id)
> > replace kun_eisvar = kun_eisvar == 1
> > drop helpvar
> >
> >
> > Hope this helps,
> >
> > Johannes
> >
> >
> >
> >
> >
> > ----------------------
> > Johannes Geyer
> > Deutsches Institut für Wirtschaftsforschung (DIW Berlin)
> > German Institute for Economic Research
> > Department of Public Economics
> > DIW Berlin
> > Mohrenstraße 58
> > 10117 Berlin
> > Tel: +49-30-89789-258
> >
> > [email protected] schrieb am 18/03/2009 11:05:24:
> >
> > > I have the following panel.
> > >
> > >
> > > Id Commdate Result2
> > > 400 05may2008 TM FAILURE
> > > 400 29may2008 DM FAILURE
> > > 400 05oct2008 TM Ei-svar
> > > 400 27oct2008 TM Ei-svar
> > > 400 30nov2008 TM Ei-svar
> > > 400 04jan2009 TM Ei-svar
> > >
> > > I would like to generate a binary variable that equals 1 if a
> > > category "TM Ei-svar" within result2 occurs. But I only want this to
> > > happen if no other category in Result2 is present within Id, either
> > > onwards are backwards in time (Commdate). Nick Cox and Martin Weiss
> > > gave excellent advice on an earlier related problem pointing me to
> > > 'bys' and using [_N] within replace statements. Nick also refered me
> > > to further free 'by' tricks at
> > >
> > > http://www.stata-journal.com/sjpdf.html?articlenum=pr0004
> > >
> > > However, I am still unable to solve the above problem. I tried
> > >
> > > gen kun_eisvar=0
> > > bys Id (Commdate):replace kun_eisvar=1 if ///
> > > (result2=="TM Ei-svar"& ///
> > > result2[_N]!="TM FAILURE"&result2[_N-1]!="TM FAILURE"& ///
> > > result2[_N]!="TM SUCCESS"&result2[_N-1]!="TM SUCCESS"& ///
> > > result2[_N]!="SUCCESS DM SMS 1999"&result2[_N-1]!="SUCCESS DM
> > SMS1999"& ///
> > > result2[_N]!="DM SUCCESS NY BIND"&result2[_N-1]!="DM SUCCESS NY
> > BIND"& ///
> > > result2[_N]!="DM SUCCESS"&result2[_N-1]!="DM SUCCESS"& ///
> > > result2[_N]!="DM FAILURE"&result2[_N-1]!="DM FAILURE")
> > >
> > > though, this does not work. See an example below.
> > >
> > > Id Commdate Result2 kun_eisvar
> > > 400 05may2008 TM FAILURE 0
> > > 400 29may2008 DM FAILURE 0
> > > 400 05oct2008 TM Ei-svar 1
> > > 400 27oct2008 TM Ei-svar 1
> > > 400 30nov2008 TM Ei-svar 1
> > > 400 04jan2009 TM Ei-svar 1
> > >
> > > Because Result2 has other categories than 'TM Ei-svar' for Id=400
> > > this observation should not equal 1.
> > >
> > > Any advice on where I went wrong is appreciated.
> > >
> > >
> > > Best wishes,
> > > Alexander
> > >
> > >
> > >
> > >
> > >
> > > *
> > > * For searches and help try:
> > > * http://www.stata.com/help.cgi?search
> > > * http://www.stata.com/support/statalist/faq
> > > * http://www.ats.ucla.edu/stat/stata/
> >
> >
> > *
> > * For searches and help try:
> > * http://www.stata.com/help.cgi?search
> > * http://www.stata.com/support/statalist/faq
> > * http://www.ats.ucla.edu/stat/stata/
> >
> > *
> > * For searches and help try:
> > * http://www.stata.com/help.cgi?search
> > * http://www.stata.com/support/statalist/faq
> > * http://www.ats.ucla.edu/stat/stata/
>
>
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
>
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/statalist/faq
> * http://www.ats.ucla.edu/stat/stata/
--
Martin Weiss
Hackersteigle 3
72076 Tübingen
00497071/793535
00491784597218
Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger01
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/