Stata 是`使用';和'varlist';为当地人保留名字?

Stata 是`使用';和'varlist';为当地人保留名字?,stata,Stata,use和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 byt

use
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

本地
varlist
syntax
命令创建,并包含单个变量的名称(如您指定的
varname
而不是
varlist
)。您可以在此处阅读更多关于此的信息:


临时变量
touse
是通过命令
marksample-touse
创建的。当
varlist
且任何权重变量均未丢失且
中的
条件满足时,该变量为1,否则为0。当
bygroup
中的变量缺失时,您可以使用
markout
修改该变量,使其值为0。本质上,它是一个临时变量,当您想要使用该观察值时,它包含值1(true),当您想要忽略该观察值时,它包含值0(false)。您可以在这里了解更多信息:

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

将名称
tuse
marksample
结合使用开始时是一种惯例,因为StataCorp程序员将其用作室内风格,许多用户程序员也效仿了这一做法。(名称与“使用”一起运行。)

marksample-tuse
通常(但不一定)在
语法
语句之后所做的是创建一个字节指示符变量,该变量在命令使用的观察值中为1,在不使用的观察值中为0

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

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

  • 如果
    语法
    语句指定
    varname
    varlist
    表示可以指定变量(通常包括变量的数量和种类),则一旦执行该语句,相关变量的名称将保存在本地宏
    varlist
    中,可以认为是由
    语法创建的

  • 您可以随时将宏名
    varlist
    用于任何您喜欢的用途,尽管对于变量名列表以外的任何东西,这样做都会被认为是不好的风格。所以,你可以随时去(例如)


请注意,如果
syntax
之前创建了这样一个
varlist
宏,那么任何这样的定义都将覆盖它,如果这不是您想要的,那么这将是一个奇怪错误的来源。(这同样适用于本地宏
if
中的

正如
marksample
帮助所解释的那样,
marksample
可用于忽略变量列表,如果不想过滤掉缺失的值,通常会这样做。对于记录,这里的代码是一个无法工作的程序片段。我缩短了
语法
行。这是它不起作用的原因吗;还有其他几个原因说明它不起作用。指的是从未定义过的本地宏;您定义了从未使用过的宏。没有
end
语句。这不太可能是一份完整的清单。
local varlist "mpg weight"