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"