是“touse”和“varlist”为本地人保留的名字吗?

时间:2013-06-26 09:06:37

标签: stata

tousevarlist究竟是什么意思?这些本地人是自动生成的吗?

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

2 个答案:

答案 0 :(得分:6)

本地varlistsyntax命令创建,包含单个变量的名称(如您指定varname而非varlist)。您可以在此处详细了解:http://www.stata.com/help.cgi?syntax

临时变量touse是由命令marksample touse创建的。当varlist并且没有丢失任何权重变量且满足ifin条件时,它是1的变量,否则为0。稍后,当markout中的变量丢失时,使用bygroup修改该变量,使其值为0。本质上它是一个临时变量,当你想要使用该观察值时包含值1(true),当你想忽略该观察时,它包含0(false)。您可以在此处详细了解:http://www.stata.com/help.cgi?marksample

答案 1 :(得分:5)

两者都不是保留字,但在两种情况下都有常规用法。

使用名称tousemarksample一起开始作为惯例,StataCorp程序员将其用作家居风格,许多用户程序员也纷纷效仿。 (该名称一起运行“使用”。)

marksample touse通常但不一定在syntax语句之后做的是创建一个字节指示符变量,在观察中使用的是1,在观察中不使用0 。

然而,这是一个非常好的惯例。是否采用它在一定程度上取决于您是否希望其他Stata程序员理解您的Stata程序。没有什么能阻止您使用其他名称,稍后您需要在程序中使用该名称。

使用名称varlist分成两部分。您的示例程序显示第一个,但不显示第二个。

  • 如果syntax语句指定varnamevarlist表示可以指定变量(通常有多少和哪种类型),那么一旦执行该名称( s)有问题的变量将保存在本地宏varlist中,可以认为是由syntax创建的。

  • 您可以随时使用宏名称varlist用于您喜欢的任何目的,尽管除了变量名列表之外的其他任何内容都会被认为是糟糕的风格。所以,你总是可以去(例如)

    local varlist "mpg weight" 
    

请注意,如果syntax之前创建了这样的varlist宏,那么任何此类定义都会覆盖它,如果这不是您想要的,则会出现奇怪的错误。 (这同样适用于本地宏ifin。)