2

究竟是什么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
4

2 回答 2

6

localvarlist是由syntax命令创建的,并且包含单个变量的名称(如您所指定的varnamenot varlist)。您可以在此处阅读更多相关信息:http: //www.stata.com/help.cgi?syntax

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

于 2013-06-26T09:51:37.853 回答
5

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

就 StataCorp 程序员将其用作内部风格而言,将名称tousemarksamplestarted 结合使用作为惯例,许多用户程序员也效仿。(该名称与“使用”一起运行。)

marksample touse通常但不一定在syntax语句之后创建一个字节指示变量,该变量在要由命令使用的观察中为 1,在不使用的观察中为 0 。

但是,这是一个非常好的约定。您是否采用它部分取决于您是否希望其他 Stata 程序员理解您的 Stata 程序。没有什么能阻止您使用另一个名称,然后您需要在以后的程序中使用它。

使用名称varlist分为两部分。您的示例程序显示了第一个,但没有显示第二个。

  • 如果一个syntax语句指定varnamevarlist指示可以指定变量(通常是多少和什么类型),那么一旦执行,相关变量的名称将保存在本地宏varlist中,可以认为是由syntax.

  • 您始终可以将宏名称varlist用于您喜欢的任何目的,尽管除了变量名称列表之外的任何用途都被认为是一种糟糕的风格。所以,你总是可以去(例如)

    local varlist "mpg weight" 
    

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

于 2013-06-26T10:03:26.573 回答