Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Nick Cox <[email protected]> |
To | "[email protected]" <[email protected]> |
Subject | Re: st: local macro |
Date | Wed, 26 Feb 2014 10:00:47 +0000 |
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 [email protected] On 26 February 2014 09:10, Nick Cox <[email protected]> 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 > [email protected] > > On 26 February 2014 04:18, Mitch Abdon <[email protected]> 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 <[email protected]> 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/