touse
和varlist
究竟是什么意思?这些本地人是自动生成的吗?
program sample, sortpreserve rclass
syntax varname(numeric) [fweight] [if] [in] ///
if "`summarize'" != "" local summ "summ"
if "`welfare'" != "" local w "w"
local inc "`varlist'"
if "`weight'" == "" gen byte `wi' = 1
else gen `wi' `exp'
marksample touse
if "`bygroup'" != "" markout `touse' `bygroup'
qui count if `touse'
if r(N) == 0 error 2000
答案 0 :(得分:6)
本地varlist
由syntax
命令创建,包含单个变量的名称(如您指定varname
而非varlist
)。您可以在此处详细了解:http://www.stata.com/help.cgi?syntax
临时变量touse
是由命令marksample touse
创建的。当varlist
并且没有丢失任何权重变量且满足if
和in
条件时,它是1的变量,否则为0。稍后,当markout
中的变量丢失时,使用bygroup
修改该变量,使其值为0。本质上它是一个临时变量,当你想要使用该观察值时包含值1(true),当你想忽略该观察时,它包含0(false)。您可以在此处详细了解:http://www.stata.com/help.cgi?marksample
答案 1 :(得分:5)
两者都不是保留字,但在两种情况下都有常规用法。
使用名称touse
与marksample
一起开始作为惯例,StataCorp程序员将其用作家居风格,许多用户程序员也纷纷效仿。 (该名称一起运行“使用”。)
marksample touse
通常但不一定在syntax
语句之后做的是创建一个字节指示符变量,在观察中使用的是1,在观察中不使用0 。
然而,这是一个非常好的惯例。是否采用它在一定程度上取决于您是否希望其他Stata程序员理解您的Stata程序。没有什么能阻止您使用其他名称,稍后您需要在程序中使用该名称。
使用名称varlist
分成两部分。您的示例程序显示第一个,但不显示第二个。
如果syntax
语句指定varname
或varlist
表示可以指定变量(通常有多少和哪种类型),那么一旦执行该名称( s)有问题的变量将保存在本地宏varlist
中,可以认为是由syntax
创建的。
您可以随时使用宏名称varlist
用于您喜欢的任何目的,尽管除了变量名列表之外的其他任何内容都会被认为是糟糕的风格。所以,你总是可以去(例如)
local varlist "mpg weight"
请注意,如果syntax
之前创建了这样的varlist
宏,那么任何此类定义都会覆盖它,如果这不是您想要的,则会出现奇怪的错误。 (这同样适用于本地宏if
和in
。)