Statalist


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

RE: st: bys and [_N] within replace


From   <[email protected]>
To   <[email protected]>
Subject   RE: st: bys and [_N] within replace
Date   Thu, 19 Mar 2009 08:05:44 +0100

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/



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