Statalist


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

st: RE: Nested loops by observation


From   Howard Lempel <[email protected]>
To   "[email protected]" <[email protected]>
Subject   st: RE: Nested loops by observation
Date   Mon, 20 Jul 2009 13:30:29 -0400

Nick and martin already provided good advice and suggestions for how to get more useful information from Statalist members.  In the meantime, you might benefit from the Stata FAQ on the difference between the -if- command and the -if- qualifier.

http://www.stata.com/support/faqs/lang/ifqualifier.html

Also, if you have a local called "cycle," then `=`cycle'+1' will resolve to the value of `cycle' plus one.  I have a feeling that this expression could replace some of the locals you define and simplify your code.

-------- start code --------------
local cycle = 1
display "`cycle'"
display "`=`cycle'+1'"
------- End code ------------------

Hope this helps.
Howie

-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of David Sabapathy
Sent: Monday, July 20, 2009 12:45 PM
To: [email protected]
Subject: st: Nested loops by observation

I have a question related to the FAQ "if command versus if qualifier".  For each observation in a dataset I need to perform a series of nested loops ("forvalues" / "if") on a longitudinal variable set to evaluate whether a "chronic" medication condition exists.  That is, each observation contains multiple years of survey information (the dgc* variables below) which is being analyzed and if a chronic condition exists a new variable "chronic" is set to 1.  I can't use the nested commands as shown below in a simplified version of the code as they only work on the first observation.  However I also can't use this nested code as a qualifier (i.e. replace chronic = 1 if ...) as syntax does not appear to allow this type of nesting.  Is there anyway I can step through observations one by one with this nested code?  Any other possible solutions?
Thank you for any help you can provide,
David

gen chronic = .

forvalues cycle = 1(1)4 {
     if dgc`cycle'_1b_cde == 0 {                       // if no med use cycle i
          local chron_cyc1 = `cycle' + 1
          if dgc`chron_cyc1'_1b_cde == 1 {       // if med use cycle_i+1
               local chron_cyc2 = `cycle' + 2
               if dgc`chron_cyc2'_1b_cde == 1 {  // if med use cycle_i+2
                    if dhc`chron_cyc1'_age >=65 & dhc`chron_cyc2'_age >=65 {
                         // "replace chronic = 2"
                         }
                   else {
                          // "replace chronic = 1"
                          }
                   }
              }
        }
}

This message and any attached documents are only for the use of the intended recipient(s), are confidential and may contain privileged information. Any unauthorized review, use, retransmission, or other disclosure is strictly prohibited. If you have received this message in error, please notify the sender immediately, and then delete the original message. Thank you.

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   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