Statalist


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

Re: st: Problem with group operation and looping


From   "Gao Liu" <[email protected]>
To   [email protected]
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 <[email protected]> wrote:
> The criterion for a new spell would perhaps be better
> as
>
> (drug != drug[_n-1])    |     (since > 45)
>
> Nick
> [email protected]
>
> > -----Original Message-----
> > From: [email protected]
> > [mailto:[email protected]]On Behalf Of n j cox
> > Sent: 16 October 2007 20:52
> > To: [email protected]
> > 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
> > [email protected]
> >
> >
> > 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

[email protected]
*
*   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/



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