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/