[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
st: RE: re: syntax
"Nick Cox" <firstname.lastname@example.org>
st: RE: re: syntax
Sun, 19 Oct 2008 16:26:26 +0100
(This posting underlines the value of asking people to refer to Stata
commands using the -cmdname- convention as the distinction between
syntax and -syntax- is crucial.)
Macros 1, 2, etc. are nothing to do with the -syntax- command. The proof
of that is that they are defined regardless of whether you use -syntax-
to parse your syntax.
At the start of a program or do-file macros 1, 2, etc. are the "tokens"
of your command line following your command name. What is a token? By
default, tokens are separated by spaces but bound by double quotes or
compound double quotes. In your examples, only spaces are of concern.
In the first case, therefore, local macro 1 contains
and local macro 2 contains
and the second case differs in that the local macro 2 contains
as the comma is not treated as a separator in the default parsing.
As you say, what you want will be obtained by inserting
after which local macros 1 and 2 will contain what you want. That is,
-tokenize- overrides the default tokenizing into arguments.
The main point is covered in [U] 18.4 Program arguments. -tokenize- is a
little more advanced. Another way to do it is
local 1 : word 1 of `varlist'
local 2 : word 2 of `varlist'
which is fine if it is clearer to you. Naturally you could use your own
names instead, say
local y : word 1 of `varlist'
local x : word 2 of `varlist'
although I suspect most Stata programmers would do the latter like this:
args y x
To answer your question directly, -syntax- does not require white space
before or after the option comma. If it did, it would have rejected your
first example syntax as illegal. Rather, you need to keep in mind that
the numbered local macros 1 up are irrelevant to -syntax-.
By the way, it is a definition of -syntax- that it operates on local
macro 0. Thus in some cases, -syntax- is used repeatedly in a program,
local macro 0 being defined upstream as needed. On occasion therefore
-syntax- can be used outside a program, but that's going beyond your
This point is correct. Sorry about the other one. The question still
I have not used syntax much. When I write the syntax command,
syntax varlist(min=2 max=2 numeric) [if] [in] [, noconstant]
I find it parses
mycommand weight weight2 , constant
mycommand weight weight2, constant
The top parses `2' to weight2 and the bottom parses `2' to weight2,
(includes the comma). Use of tokenize varlist avoids this problem, but
is it a long standing feature of syntax to require option commas to be
separated by white space? I can't remember being careful about how I
type that interactively.
* For searches and help try: