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

From |
Eva Poen <eva.poen@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: bys and [_N] within replace |

Date |
Wed, 18 Mar 2009 13:51:29 +0000 |

Alexander, your original code does not work because you check for the last and second last observation only, within Id. If you code bysort Id (Commdate) : ... if result2[_N] != "TM FAILURE" & result2[_N-1] != "TM FAILURE" , Stata looks up the value of result2 in the in the last (_N) and second last (_N-1) observation for each Id. _N always denotes the last observation within each group, and _n denotes the current observation. The above expression evaluates to true if, in the two last observations in a group, result2 does not equal "TM FAILURE". You would have to check _all_ observations within Id, though. Generally, this is a very cumbersome way of checking things because you have to explicitely spell all other possible values apart from "TM Ei-svar", which is never a good idea because it is prone to errors. It is unnecessary, too, even with your approach, since you could just as well code bysort Id (Commdate) : ... if result2[_N] == "TM Ei-svar" & result2[_N-1] == "TM Ei-svar" Still, this is very complicated because you would have to add many more conditions, right up to result2[1]=="TM Ei-svar", in order to make sure only pick the cases you want. It gets yet more complicated with unbalanced panels, since _N will vary between groups, and, say, _N-7 might not be defined in all groups, in which case result2[_N-7] would evaluate to missing in groups with less than 8 observations. Many reasons to take the easy route :-) Eva 2009/3/18, Alexander.Severinsen@telenor.com <Alexander.Severinsen@telenor.com>: > 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 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. > > 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: owner-statalist@hsphsun2.harvard.edu > [mailto:owner-statalist@hsphsun2.harvard.edu] På vegne av Johannes Geyer > Sendt: 18. mars 2009 11:28 > Til: statalist@hsphsun2.harvard.edu > 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 > > owner-statalist@hsphsun2.harvard.edu 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/ > -- Von meinen Mobilgerät aus gesendet * * 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/

**References**:**st: bys and [_N] within replace***From:*<Alexander.Severinsen@telenor.com>

**Re: st: bys and [_N] within replace***From:*Johannes Geyer <JGeyer@diw.de>

**RE: st: bys and [_N] within replace***From:*<Alexander.Severinsen@telenor.com>

- Prev by Date:
**RE: st: bys and [_N] within replace** - Next by Date:
**RE: st: Bar Chart Area Pattern** - Previous by thread:
**Re: RE: st: bys and [_N] within replace** - Next by thread:
**RE: st: bys and [_N] within replace** - Index(es):

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