# Re: st: RE: new local macro from results of loop

 From n j cox To statalist@hsphsun2.harvard.edu Subject Re: st: RE: new local macro from results of loop Date Wed, 30 May 2007 17:14:24 +0100

The principle is shown by a simpler loop:

forval i = 1/10 {
local a `a' `i'
}

We assume that -local a- has not been defined upstream of this.

First time round the loop, Stata sees, initially,

local a `a' `i'

and first substitutes macro definitions it already knows. -a-
as just assumed doesn't exist, or equivalently it is replaced
by an empty string. -i- is "1", as far as Stata knows, so after substitution Stata sees

local a 1

This is now an assignment. -local a- is assigned whatever follows
it. So -a- is born as "1".

Second time round the loop, Stata sees, after substitution

local a 1 2

and so forth. So -local a- accumulates the changing values of -i-.

A mantra: substitution of macro definitions precedes evaluation of
expressions.

The double quotes are optional, for most purposes.

local "`a' `i'"

local -a- would be borm as " 1"

local a "`a'`i' "

it would be born as "1 ", and so on. Mostly, but not always, these
extra spaces disappear in the wash.

Similarly, an equals sign is optional, for this problem and for yours.

There is a tutorial covering this in your context at

Cox, N.J. 2002. How to face lists with fortitude. Stata Journal 2(2):202--222

demonstrates the usefulness of for, foreach, forvalues, and
local macros for interactive (non programming) tasks

Earlier versions of that are accessible at
http://fmwww.bc.edu/RePEc/usug2002/fortitude.pdf
http://www.cpc.unc.edu/services/computer/presentations/statatutorial/cox_article.pdf

and it's all in the manual somewhere.

Nick
n.j.cox@durham.ac.uk

Ronnie Babigumira

Both of your suggestions work (they look the same save for the "" in Maartens solution). That said, I have missed the
obvious so I will ask that you help me with the logic

My part of the loop goes through each element and does my stuff

foreach v of local lvstk {
--my stuff--

How exactly does your part work
local lvstknos "`lvstknos' `v'nbeg `v'nend"
local new `new' `v'nbeg `v'nend

It appears that you are each amending a new local (part of my confusion is that this new local has not been initialised
before). My other problem is that I don't see the part that instructs Stata to incrementally build the new local

Again, your solutions both work . I just want to understand the logic

*
* 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/