Statalist


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

RE: st: bys and [_N] within replace


From   <Alexander.Severinsen@telenor.com>
To   <statalist@hsphsun2.harvard.edu>
Subject   RE: st: bys and [_N] within replace
Date   Wed, 18 Mar 2009 13:51:59 +0100

Eva, thank you very much. That solved the problem very efficiently.

Best wishes,
Alexander Severinsen

-----Opprinnelig melding-----
Fra: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] På vegne av Eva Poen
Sendt: 18. mars 2009 11:17
Til: statalist@hsphsun2.harvard.edu
Emne: Re: st: bys and [_N] within replace

Alexander,

try this:
gen other =  Result2 != "TM Ei-svar"
bysort Id (Commdate) : replace other = sum(other)
by      Id (Commdate) : gen dummy = other[_N]==0

drop other

Eva


2009/3/18  <Alexander.Severinsen@telenor.com>:
> 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 SMS 1999"& ///
>        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