Statalist


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

Re: RE: st: bys and [_N] within replace


From   "Martin Weiss" <[email protected]>
To   [email protected]
Subject   Re: RE: st: bys and [_N] within replace
Date   Thu, 19 Mar 2009 10:25:34 +0100

<>

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/



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