Notice: On March 31, it was **announced** that Statalist is moving from an email list to a **forum**. The old list will shut down on April 23, and its replacement, **statalist.org** is already up and running.

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

From |
Nick Cox <njcoxstata@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: Finding patterns of consecutive number |

Date |
Thu, 26 Apr 2012 09:45:57 +0100 |

The code will simplify as if _n == 1 | (test - test[_n-1] != 1) could be written if (test - test[_n-1] != 1) because -test[0]- will be evaluated as missing. But in practice with spell problems, the first observation in a panel often needs explicit attention as we know nothing about what preceded it. And code that deals explicitly with the first observation is often easier to understand. This may also be of interest: FAQ . . . . . . Identifying runs of consecutive observations in panel data . . . . . . . . . . . . . . . . . . . . . . . N. J. Cox and V. Wiggins 8/02 How do I identify runs of consecutive observations in panel data? http://www.stata.com/support/faqs/data/panel.html On Thu, Apr 26, 2012 at 2:58 AM, Marshall Garland <marshall.w.garland@gmail.com> wrote: > This is exactly what I needed. > > Thanks so much for your help and prompt reply. On Wed, Apr 25, 2012 at 8:24 PM, Nick Cox <njcoxstata@gmail.com> wrote: >> I think of your problem as defining spells of consecutive integers, so >> that a spell starts with the first observation in each panel or if the >> previous value was not one fewer. >> >> bysort id (year) : gen progress = string(test) if _n == 1 | (test - >> test[_n-1] != 1) >> by id : replace progress = progress[_n-1] + string(test) if missing(progress) >> >> Dealing with spells: see also -tsspell- (SSC) or >> >> SJ-7-2 dm0029 . . . . . . . . . . . . . . Speaking Stata: Identifying spells >> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N. J. Cox >> Q2/07 SJ 7(2):249--265 (no commands) >> shows how to handle spells with complete control over >> spell specification >> >> By the way, as the putative author of -tostring-, I note that it is >> overkill here. The -string()- function is all you need. On Wed, Apr 25, 2012 at 11:47 PM, Marshall Garland >> <marshall.w.garland@gmail.com> wrote: >> >>> I have panel student testing data spanning six years. Each year, I >>> have a unique student and student test level and outcome. Testing >>> levels across years are not necessarily consecutive, nor are years. >>> For each student, in each year, I'd like to create a variable that >>> captures the longitudinal test progression for each student, in each >>> year. However, for each year, I'd like the maximum consecutive test >>> progression, without disruptions. This maximum test progression should >>> only be calculated for consecutive years, too. >>> >>> I've posted my data at the end of this message, which will help >>> describe my objective. For student A, in 2008/09, her test progression >>> is 6543, since she had 4 consecutive years of test data. This is >>> perfect. Student B, however, in 2008/09, has a test progression of >>> 7643. However, I only want to record, for student B, the maximum >>> consecutive test progression, which is 76 and ignore the 43. The 43 >>> progression will be captured in the corresponding year (2006/07). >>> >>> I can't figure out a way to adjust for this discontinuity. I've tried >>> a number of things, including this. But, this still captures repeated >>> test levels across years (student C below, in 2008/09). >>> >>> Thanks for help in advance. >>> >>> Cheers, >>> >>> -mwg >>> >>> /**************************************************** >>> bys research_id: gen test_t=d.test_level_2 >>> bys research_id: egen max_test_t=max(test_t) >>> >>> ///group creation for consecutive runs >>> forvalues i=0/6 { >>> gen group_`i'=. >>> bys research_i (sch_yr): replace group_`i'=test_level_2[_n-`i'] if >>> max_test_t==1 & test_t==1 >>> tostring group_`i', replace >>> replace group_`i'="" if group_`i'=="." >>> } >>> >>> egen group_ty_cons=concat(group_0- group_6) >>> tab group_ty_cons >>> /************************************************************** >>> >>> Here's my data: >>> student year test_level progression >>> A 2005/06 3 >>> A 2006/07 4 43 >>> A 2007/08 5 543 >>> A 2008/09 6 6543 >>> B 2005/06 3 >>> B 2006/07 4 43 >>> B 2007/08 6 643 >>> B 2008/09 7 7643 >>> C 2005/06 6 >>> C 2006/07 7 76 >>> C 2007/08 8 876 >>> C 2008/09 8 8876 * * 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/

**Follow-Ups**:**Re: st: Finding patterns of consecutive number***From:*Marshall Garland <marshall.w.garland@gmail.com>

**References**:**st: Finding patterns of consecutive number***From:*Marshall Garland <marshall.w.garland@gmail.com>

**Re: st: Finding patterns of consecutive number***From:*Nick Cox <njcoxstata@gmail.com>

**Re: st: Finding patterns of consecutive number***From:*Marshall Garland <marshall.w.garland@gmail.com>

- Prev by Date:
**Re: FW: st: Regression with multiple age groups** - Next by Date:
**Re: st: cholesky vs matpowersym for FGLS transformation in Mata** - Previous by thread:
**Re: st: Finding patterns of consecutive number** - Next by thread:
**Re: st: Finding patterns of consecutive number** - Index(es):