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

From |
n j cox <n.j.cox@durham.ac.uk> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: Simple longitudinal data question – drug cont |

Date |
Fri, 05 Oct 2007 11:22:00 +0100 |

-egen- is your friend. You can count prescriptions in the first half of 2005 by egen in2005 = total(drug == "microg" & inrange(datevisit, mdy(1,1,2005), mdy(6,30,2005))), by(patient_id) and in 2006 similarly by egen in2006 = total(drug == "microg" & inrange(datevisit, mdy(1,1,2006), mdy(6,30,2006))), by(patient_id) You want patients with positive values of both variables. gen both = (in2005 > 0) & (in2006 > 0) or equivalently gen both = in2005 & in2006 -count if both- will count all visits by those patients, regardless of prescription. That is not what you need. However, egen tag = tag(patient_id) will tag just one observation for each patient. So count if tag & both will count patients with prescriptions in both years. See also FAQs for related technique: How do I create a variable recording whether any members of a group (or all members of a group) possess some characteristic? http://www.stata.com/support/faqs/data/anyall.html What is true and false in Stata? http://www.stata.com/support/faqs/data/trueorfalse.html More generally, I can imagine a fourfold table: no & no no & yes yes & no yes & yes and that's programmable, say on the following lines (rough sketch only, no promises it works) program twoperiod version 8 syntax [if] [in] , first(str asis) second(str asis) by(varname) quietly { marksample touse, novarlist count if `touse' if r(N) == 0 error 2000 tempvar tag t1 t2 which egen `tag' = tag(`by') if `touse' egen `t1' = max((`first') & `touse'), by(`by') egen `t2' = max((`second') & `touse'), by(`by') } tempname lbl label var `t1' "in first period" label var `t2' "in second period" label def `lbl' 0 "no" 1 "yes" label val `t1' `lbl' label val `t2' `lbl' tab `t1' `t2' if `tag' end with call like twoperiod, first(drug == "microg" & inrange(datevisit, mdy(1,1,2005), mdy(6,30,2005))) second(drug == "microg" & inrange(datevisit, mdy(1,1,2006), mdy(6,30,2006))) by(patient_id) Nick n.j.cox@durham.ac.uk Paul O'Brien I have a database of clinic visits with 3 variables, patient_id, datevisit, and drug. I want to know the number of patients who were prescribed drug ‘microg’ in the first half of 2005 were also prescribed the same drug during a visit in the first half of 2006. Or is there a better way to calculate the one-year continuation rate? Patients can make any number of visits. * * 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/

- Prev by Date:
**Re: Re: st: RE: KSmirnov: testing for first order stochastic dominance** - Next by Date:
**Re: st: Modelling the passage of time: OLS vs survival analysis** - Previous by thread:
**Re: Re: st: RE: KSmirnov: testing for first order stochastic dominance** - Next by thread:
**Re: st: Modelling the passage of time: OLS vs survival analysis** - Index(es):

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