|
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]
Re: st: RE: programming problem
Never noticed -concat- before. Nice.
thanks,
Jeph
Nick Cox wrote:
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/
*
* 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/