An apparent limit on the -tokenize-
approach is that it overwrites previously
defined sets of macros with names 1, 2,
etc. So it may seem that you cannot work
with two or more sets of numbered macros.
But of course you can.
I have suggested previously that -tokenize-
be generalized to allow a stub to be specified
so that tokenizing a list
frog toad newt
with stub -a- would define macros -a1-, -a2-, -a3-.
This can be done without waiting for StataCorp
to see the light, and is implemented in -tknz-
on SSC.
program def tknz, rclass
*! NJC 1.1.0 2 June 2000
version 6.0
gettoken list 0 : 0, parse(",")
syntax , Stub(str) [ * ]
tokenize `"`list'"' , `options'
local i = 1
while "``i''" != "" {
c_local `stub'`i' `"``i''"'
local i = `i' + 1
}
end
The version on SSC is not up-to-date:
* 2.0.0 NJC 12 June 2005
program tknz, rclass
version 8
gettoken list 0 : 0, parse(",")
syntax , Stub(str) [ * ]
tokenize `"`list'"' , `options'
local i = 1
foreach l of local list {
c_local `stub'`i' `"``i''"'
local ++i
}
end
Nick
[email protected]
Nick Cox
> Thanks for the thanks. A variety of tricks are
> described in a sequel to the article you mention.
>
> SJ-3-2 pr0009 . . . . . . . . . . . . . Speaking Stata:
> Problems with lists
> . . . . . . . . . . . . . . . . . . . . . . . . . . .
> . . . N. J. Cox
> Q2/03 SJ 3(2):185--202
> (no commands)
> discusses ways of working through lists held in macros
>
> while some of the same ground is covered in an FAQ:
>
> FAQ . . . . . . . . . . . . . . . . Looping over
> parallel list in Stata 8
> . . . . . . . . . . . . . . . . . . . . . . . . . . .
> . . . . K. Crow
> 12/04 How do I process parallel lists in Stata 8?
> http://www.stata.com/support/faqs/lang/parallel.html
>
> In essence, -word # of- is your friend.
>
> Another command that is useful is -tokenize-. Here is a
> trivial example:
>
> . sysuse auto, clear
> (1978 Automobile Data)
>
> . tokenize execrable dire mediocre good spectacular
>
> . mac li
> [...]
> _5: spectacular
> _4: good
> _3: mediocre
> _2: dire
> _1: execrable
>
> . forval i = 1/5 {
> 2. label def report `i' "``i''" , add
> 3. }
>
> . label li report
> report:
> 1 execrable
> 2 dire
> 3 mediocre
> 4 good
> 5 spectacular
>
> Nick
> [email protected]
>
> Gawrich Stefan
>
> > I do a lot of routine or repetitive data analysis and use
> > loops and lists
> > frequently (btw, thx to Nick Cox, his "How to fact lists with
> > fortitude"
> > helped me a lot).
> >
> > I'm wondering why the "for"-command is officialy out of date
> > in Stata while
> > one of it's best features - the use of parallel lists -
> can't be done
> > otherwise. Or am I missing something?
> >
> > One example: I routinely map ten different diseases with tmap
> > and save the
> > maps as a graphic file.
> >
> > for var var1-var10 \ any "Disease1" "Disease2" [...] \ any
> "Filename1"
> > "Filename2" [...] : ///
> > tmap choro X, id(county) map("county-Coordinates.dta")
> > title("Y") \ graph
> > export "Z.png", replace
> >
> > In this example each graph is determined by something like a
> > 3-tuple of
> > variable, title and saving-filename.
> > This is just basic code, in real life the code blows up and
> > becomes hard to
> > read, as we all know, "for" has some disadvantages.
> > So if it can be done in a more structured manner, I would
> > like to know...
> >
>
> *
> * 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/