Statalist


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

RE: st: RE: programming problem


From   "Nick Cox" <n.j.cox@durham.ac.uk>
To   <statalist@hsphsun2.harvard.edu>
Subject   RE: st: RE: programming problem
Date   Thu, 16 Aug 2007 22:37:04 +0100

This problem is, in my view, an awkward little challenge. 

I very nearly posted a solution that was _quite_ 
wrong. 

A -reshape- solution, as exemplified by Sebastian's code,
looks awkward for just this problem, but may of course be a good
idea for a variety of other problems. 

A quite different idea runs like this: 

egen history = concat(var1-var12) 
gen byte mycond = substr(history, month, 1) == "1" 

The appearance here of avoiding a loop over variables
is illusory, as a  loop is hidden inside -concat()- 
(and even as of Stata 10 it is still a -while- loop). 

But a concatenated history makes some other problems 
easy, even with this wide data structure. 

Has this person experienced a spell of three or more months 
with this condition?  

gen byte spell3 = strpos(history, "111") > 0 

When was the first month in the year with 
this condition?  

gen byte first = strpos(history, "1") 

When was the last month in the year with 
this condition? 

gen byte first = cond(first, 13 - strpos(reverse(history), "1"), 0)  

Nick 
n.j.cox@durham.ac.uk 

Jeph Herrin
 
> Duh.
> 
> I had done this:
> 
>   forval j = 1/12 {
>    	replace mycond =  `j' == month & var`j' == 1
>   }
> 
> Which effectively only tests month 12, before I veered
> off in another direction.
 
Nick Cox

> > Short of a solution using -reshape-, I think
> > this will suit: 
> > 
> > gen mycond = 0 
> > forval j = 1/12 { 
> > 	replace mycond = 1 if `j' == month & var`j' == 1 
> > } 
> > 
> > where I assume that your -var*- are 1 when true. 
 
Jeph Herrin
 
> >> I have observations on patient admissions over
> >> a 12 month period.
> >>
> >> For each observation, I have 12 variables, call
> >> them var1-var12, which indicate whether a certain
> >> condition was met for that patient for months 1-12.
> >> So, eg, it may be true for months 1-3 and 7-12.
> >>
> >> I also have a variable -month-, which indicates
> >> the current month of the observed admission. What
> >> I want to capture is whether the condition was true
> >> in the month of admission.
> >>
> >> For instance, at first I unthinkingly tried this:
> >>
> >>   gen mycond = var`=month'==1
> >>
> >> but this of course uses the first observed value
> >> of -month-, which happens to be 6, and only checks
> >> -var6-.
> >>
> >> I eventually got there by creating lots of vars, but is
> >> there a more direct solution?

*
*   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–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index