Stata软件tokenize和gettoken命令的用法
有时可能想要对宏进行分解,而只获取所需的部分,可以通过tokenize或gettoken命令来实现。相比起语法(Syntax)命令,这种解析方式也被称为低水平语法分析。下面对这两个命令分别进行介绍。
(1)tokenize
通过tokenize将宏分解成几部分的基本命令为:
tokenize [[']"] [string] ["[']] [, parse("pchars")]
其中,string代表要分解的宏的名称,选项parse("pchars")表示用pchars作为各个部分的分隔符,默认为空格。tokenize命令会将指定的宏分解为几个记号(Token),并依次将各部分保存在局部宏`1'、`2'中,以此类推。
(2)gettoken
gettoken命令提供了解析输入参数的另一途径,基本命令格式为:
gettoken emname1 [emname2] : emname3 [, parse("pchars") quotes qed(lmacname) match(lmacname) bind]
该命令会获取宏emname3分隔符之前的记号(Token),并将其存储在宏emname1中。如果同时设定了宏emname2,Stata就会将剩下的记号存储在宏emname2中。宏emname1和emname3,或者宏emname2和emname3,可以有相同的名字。
宏emname可以有如下3种形式:
①macroname局部宏
②(local) macroname局部宏
③(global) macroname全局宏
对于其他的选项,quotes表示宏emname1内容的外引号被保留,该选项不影响宏emname2,因为它总是保留其内容的外引号。qed(lmacname)表示生成一个局部宏lmacname,若返回的记号(Token)在初始字符串中为引号所包围,则其值为1,否则为0。match(lmacname)表示,在决定记号时,括号会被匹配;此外,在记号被存储至宏emname1之前,括号会被移除。而如果有括号,局部宏lmacname的值为“(”,否则,就是空串。bind表示小括号“()”或中括号“[]”中的内容会被当作一个记号,即便分隔符不是括号。
通常情况下,gettoken命令的运用方式是这样的:
gettoken emname1 : 0 [, options]
或:
gettoken emname1 0 : 0 [, options]
这里,宏`0'包含用户所输入的内容。第1种方式会将取出的第一个token保存到宏emname1中;而第2种方式将剩下的部分再保存到宏`0'中。