什么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
Run Code Online (Sandbox Code Playgroud)
本地varlist是由syntax命令创建的,包含单个变量的名称(如您varname未指定的那样varlist).您可以在这里阅读更多相关信息:http://www.stata.com/help.cgi?syntax
临时变量touse由命令创建marksample touse.当一个变量为1时varlist,任何权重变量都没有丢失if且in条件满足,否则为0.稍后修改该变量markout时,bygroup如果缺少变量,则使用值0 .本质上它是一个临时变量,当你想要使用该观察值时包含值1(true),当你想忽略该观察时,它包含0(false).您可以在此处阅读更多相关信息:http://www.stata.com/help.cgi ?marksample
两者都不是保留字,但在两种情况下都有常规用法.
touse在marksampleStataCorp程序员使用它作为家居风格时,使用名称与start 一起开始作为惯例,许多用户程序员也效仿.(名称一起运行"使用".)
什么marksample touse呢,通常但不一定是后syntax声明,是创建一个字节指示变量为1在观测由命令被使用并且在0观测不被使用.
但是,这是一个非常好的惯例.是否采用它在一定程度上取决于您是否希望其他Stata程序员理解您的Stata程序.没有什么能阻止您使用其他名称,稍后您需要在程序中使用该名称.
使用名称varlist分为两部分.您的示例程序显示第一个,但不显示第二个.
如果一个syntax语句指定varname或varlist指示可以指定变量(通常是多少和哪种类型),那么一旦执行该变量,有关变量的名称将保存在本地宏中varlist,可以将其视为由...创建syntax.
你总是可以将宏名称varlist用于你喜欢的任何目的,尽管除了变量名列表之外的任何东西都会被认为是糟糕的风格.所以,你总能去(例如)
local varlist "mpg weight"
Run Code Online (Sandbox Code Playgroud)请注意,如果syntax之前创建了这样一个varlist宏,那么任何这样的定义都会覆盖它,如果这不是你想要的,那就是一个奇怪的错误来源.(这同样适用于本地宏if和in.)