Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | R Zhang <r05zhang@gmail.com> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: local macro |
Date | Wed, 26 Feb 2014 14:25:56 -0500 |
Many thanks to Nick and Mitch !!! -Rochelle On Wed, Feb 26, 2014 at 5:00 AM, Nick Cox <njcoxstata@gmail.com> wrote: > I'll repeat a very simple tip that I use repeatedly. -macro list- > tells you what macros you have defined. If you try to "initialise" a > macro with (e.g.) > > local j = "" > > and follow with -macro list-, no such macro will be listed. That > doesn't mean that there is no point to such a statement. > > 1. If you used the same-named macro earlier in the program, you may > well need to flush the existing contents. > > 2. Sometimes people like to initialise macros before a loop as a > matter of personal programming style. If the initial value would just > be empty, that's redundant but harmless, comfort programming as it > were. > > Nick > njcoxstata@gmail.com > > > On 26 February 2014 09:10, Nick Cox <njcoxstata@gmail.com> wrote: >> Mitch is essentially correct. Otherwise put, >> >> 1. If a macro doesn't exist, references to it are not illegal, but >> Stata substitutes an empty string, or -- equivalently -- ignores the >> reference. The first time a reference to `i' is seen, there is no such >> macro, so the statement is interpreted as >> >> rename d1t1 y >> >> 2. Conversely, assigning a macro an empty string is a way to destroy >> it. (A macro is also destroyed, or disappears, when the corresponding >> program terminates.) >> >> I don't think it's quite true to imply that macros are initialised to >> empty strings. Reversing the statement above, macros can't be empty >> strings just as empty strings can't be macros, except in the flash of >> their disappearance. >> >> Nick >> njcoxstata@gmail.com >> >> On 26 February 2014 04:18, Mitch Abdon <mitchaabdon@gmail.com> wrote: >>> hi, rochelle. >>> >>> more appropriately, it is 'initialized' to nothing. >>> in the first instance, `i' is nothing, not even zero. that's is why you get y not y0. >>> in the next iteration, i is defined as i = `i' + 1 which is 1, thus the y1.. and so on. >> >> On Feb 26, 2014, at 11:53 AM, R Zhang <r05zhang@gmail.com> wrote: >> >>>> this might be a rudimentary question, >>>> >>>> I saw the following code on UCLA stata cite >>>> >>>> http://www.ats.ucla.edu/stat/stata/faq/doublewide.htm >>>> >>>> ********************************* >>>> input d1t1 d1t2 d1t3 d2t1 d2t2 d2t3 d3t1 d3t2 d3t3 >>>> 4 5 6 5 6 5 6 7 8 >>>> 3 4 5 4 5 4 3 4 5 >>>> end >>>> >>>> >>>> >>>> generate id = _n >>>> foreach v of varlist d1t1 d1t2 d1t3 d2t1 d2t2 d2t3 d3t1 d3t2 d3t3 { >>>> rename `v' y`i' >>>> local i = `i' + 1 >>>> } >>>> ********************************* >>>> >>>> my question is: is the i initialized to 0 (default), I ask because >>>> the output is >>>> >>>> y y1 y2 y3 y4 y5 y6 y7 y8 id >>>> >>>> 1. 4 5 6 5 6 5 6 7 8 1 >>>> 2. 3 4 5 4 5 4 3 4 5 2 > * > * For searches and help try: > * http://www.stata.com/help.cgi?search > * http://www.stata.com/support/faqs/resources/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/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/