Statalist


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

Re: st: bys and [_N] within replace


From   Johannes Geyer <JGeyer@diw.de>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: bys and [_N] within replace
Date   Wed, 18 Mar 2009 11:27:35 +0100

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/



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