Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: st: Keep observations in panel data
From 
 
Nick Cox <[email protected]> 
To 
 
"'[email protected]'" <[email protected]> 
Subject 
 
RE: st: Keep observations in panel data 
Date 
 
Tue, 18 Jan 2011 21:15:24 +0000 
I'm missing in this (and my previous posts) the extra condition that the year before a subsidy must not be a time of subsidy. 
Here is my code recast for that: 
(-tsspell- solution)
tsset id year
tsspell, fcond(subsidy == 0 & subsidy[_n+1] == 1 & subsidy[_n+2] == 0 & subsidy[_n+3] == 0)
drop if _spell == 0 | _seq >= 5
(history wrapped up in string)
gen history = ""
bysort id (year) : replace history = history[_n-1] + string(subsidy)
by id : replace history = history[_N]
by id : gen start = strpos(history, "0100") == _n
by id : keep if start == 1 | start[_n-1] == 1 | start[_n-2] == 1 | start[_n-3] == 1 
(one-liner) 
local s "subsidy"
bysort id (year) : keep if
(`s' == 0 & `s'[_n+1] == 1 & `s'[_n+2] == 0 & `s'[_n+3] == 0) 
|
(`s'[_n-1] == 0 & `s' == 1 & `s'[_n+1] == 0 & `s'[_n+2] == 0) 
| 
(`s'[_n-2] == 0 & `s'[_n-1] == 1 & `s' == 0 & `s'[_n+1] == 0) 
| 
(`s'[_n-3] == 0 & `s'[_n-2] == 1 & `s'[_n-1] == 0 & `s' == 0)    
Nick Cox
Here is another way to do it using -tsspell- from SSC:
. tsset id year
. tsspell, fcond(subsidy & !subsidy[_n+1] & !subsidy[_n+2])
. l
     +--------------------------------------------+
     | id   year   subsidy   _spell   _seq   _end |
     |--------------------------------------------|
  1. |  1   2000         0        0      0      0 |
  2. |  1   2001         0        0      0      0 |
  3. |  1   2002         1        1      1      0 |
  4. |  1   2003         0        1      2      0 |
  5. |  1   2004         0        1      3      0 |
     |--------------------------------------------|
  6. |  1   2005         1        1      4      1 |
  7. |  2   2000         0        0      0      0 |
  8. |  2   2001         0        0      0      0 |
  9. |  2   2002         1        0      0      0 |
 10. |  2   2003         1        0      0      0 |
     |--------------------------------------------|
 11. |  2   2004         0        0      0      0 |
 12. |  2   2005         1        0      0      0 |
 13. |  3   2000         1        0      0      0 |
 14. |  3   2001         1        0      0      0 |
 15. |  3   2002         1        0      0      0 |
     +--------------------------------------------+
. drop if _spell == 0 | _seq >= 4
. l
     +--------------------------------------------+
     | id   year   subsidy   _spell   _seq   _end |
     |--------------------------------------------|
  1. |  1   2002         1        1      1      0 |
  2. |  1   2003         0        1      2      0 |
  3. |  1   2004         0        1      3      0 |
     +--------------------------------------------+
Nick Cox
Here is another way to tackle this that hinges on being able to pack
the history into a string variable:
 gen history = ""
 bysort id (year) : replace history = history[_n-1] + string(subsidy)
 by id : replace history = history[_N]
 by id : gen start = strpos(history, "100") == _n
 by id : keep if start == 1 | start[_n-1] == 1 | start[_n-2] == 1
On Tue, Jan 18, 2011 at 3:29 PM, Nick Cox <[email protected]> wrote:
> bysort id (year) : keep if
> (subsidy == 1 & subsidy[_n+1] == 0 & subsidy[_n+2] == 0) |
> (subsidy == 0 & subsidy[_n-1] == 1 & subsidy[_n+1] == 0) |
> (subsidy == 0 & subsidy[_n-2] == 1 & subsidy[_n-1] == 0)
>
*
*   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/