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