[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

From |
"Gao Liu" <gao.liu@gmail.com> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: Problem with group operation and looping |

Date |
Wed, 17 Oct 2007 11:09:31 -0400 |

Thank you, Nick, You are always helpful Best Gao On 10/16/07, Nick Cox <n.j.cox@durham.ac.uk> wrote: > The criterion for a new spell would perhaps be better > as > > (drug != drug[_n-1]) | (since > 45) > > Nick > n.j.cox@durham.ac.uk > > > -----Original Message----- > > From: owner-statalist@hsphsun2.harvard.edu > > [mailto:owner-statalist@hsphsun2.harvard.edu]On Behalf Of n j cox > > Sent: 16 October 2007 20:52 > > To: statalist@hsphsun2.harvard.edu > > Subject: Re: st: Problem with group operation and looping > > > > > > I see no (need for) looping here. This is, I believe, > > a standard spell problem. Some years ago Richard Goldstein > > and I wrote a -spell- program, which is still on SSC > > (Stata 6 required). Then I wired in an assumption that > > your data are -tsset- data and wrote -tsspell-, which is > > also still on SSC (Stata 7 required). Please note that > > the help file for -tsspell- is stuffed with spells for > > spells. > > > > More recently I wrote the ideas up in a column in > > Stata Journal 7(2) 2007: an abstract is at > > <http://www.stata-press.com/journals/sjabstracts/dm0029.pdf> > > That is a rather detailed, and perhaps tedious, paper spelling > > out the exact logic I have found useful for spell problems. > > > > That column doesn't mention -spell- or -tsspell-. It > > seemed more fruitful to explain the underlying Stata > > ideas. So too, from now on, in this case. > > > > Let's start with Gao Liu's second question, assuming that > > the dataset is as desired. A spell for any person is, I take it, > > that they stayed on the same drug with no gap more than 45 days. > > Thus we need to get the time since previous prescription: > > > > bysort id (date) : gen since = date - date[_n-1] > > > > This will be missing for the first -date- for any -id- > > and missing (.) counts as greater than 45 (days), which is fine. Thus > > a spell starts whenever > > > > (drug != drug[_n-1]) & (since > 45) > > > > That is a true or false statement which evaluates > > to 1 if true or 0 if false. The parentheses and generous > > spacing aren't needed, but they may be helpful. Thus we can > > tag spells 1, 2, 3, ... for each -id- by > > > > by id: gen spell = sum( (drug != drug[_n-1]) & (since > 45) ) > > > > Some people would want me to point out that the two lines > > here could be one: > > > > bysort id (date) : gen spell = > > sum( (drug != drug[_n-1]) & ( (date - date[_n-1]) > 45)) > > > > but that variable -since- might turn out to be interesting or useful > > in its own right. > > > > Once you have defined spells, then the start of each spell is > > naturally just the first -date- in each: > > > > bysort id spell (date) : gen start = date[1] > > > > and other calculations call for similar applications of -by:-. > > The Speaking Stata column is full of such stuff, with endless > > minor variations on the same theme. > > > > The first question seems to call for various -keep- or -drop- > > statements. > > > > Nick > > n.j.cox@durham.ac.uk > > > > > > Gao Liu > > > > I think I am still quite confused with group operations using var[i] > > and looping, so I am struggling with the following problem. I would > > really appreciate if somebody can give me a hand. > > > > I have a dataset containing following variables: ID, day_of_service, > > drug_name, in which day_of service is the first day when the ID is > > treated with the drug. The dataset contains data from 2003 to 2006. > > Each ID may be treated for many times, and each time may be treated > > with a different drug. In other word, they might switch from one drug > > to another. But they would not switch back to a previously used drug. > > > > I need to prepare two things for further analysis using the dataset. > > First, I want to keep the observations with an entry. All > > IDs with the first day_of service starting after 2004 will be kept. > > For IDs with services before 2004, there are two situations: (the > > first service day in 2004)- (the last service day in 2003)>45 or <45. > > If <45, all observations of the ID would be dropped. If ID with >45, > > observations after 2004 will be kept, but 2003 observations for the > > same ID will be dropped. > > > > Second, I need to figure out that for each drug (6 drugs totally), how > > long an ID stuck with the drug before he/her switched to another drug > > or exit. It is considered an exit if there is no new treatment 45 days > > after the last treatment. > > * > * For searches and help try: > * http://www.stata.com/support/faqs/res/findit.html > * http://www.stata.com/support/statalist/faq > * http://www.ats.ucla.edu/stat/stata/ > -- #405 Patterson Office Tower Martin School of Public Administration and Policy University of Kentucky Phone: 859-257-5481 Fax: 859-323-1937 Gao.liu@uky.edu * * For searches and help try: * http://www.stata.com/support/faqs/res/findit.html * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

**References**:**Re: st: Problem with group operation and looping***From:*n j cox <n.j.cox@durham.ac.uk>

**RE: st: Problem with group operation and looping***From:*"Nick Cox" <n.j.cox@durham.ac.uk>

- Prev by Date:
**st: PERL-Phyton scripts within Stata - Can Stata call another program?** - Next by Date:
**Re: st: PERL-Phyton scripts within Stata - Can Stata call another program?** - Previous by thread:
**RE: st: Problem with group operation and looping** - Next by thread:
**st: Returning Mata Results to Stata** - Index(es):

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