如何在 Stata 中存储多个变量名?
How to store several variable names in Stata?
我想在一个新的局部变量中存储一个变量名列表,这样我就不必为每个回归输入一长串变量名。我正在使用 Stata 14。
例如,我有以下 5 个自变量:a b c d e
和一个因变量:f
我不想:
regress f a b c d e
但我想要这样的东西:
regress f allvar
如何生成 allvar
?
不幸的是,这不起作用
local allvar a b c d e
以下工作正常。
clear
set more off
sysuse auto
// first regressions
regress price mpg rep78 weight
// second regression
local allvars mpg rep78 weight
regress price `allvars'
除非您向我们展示一些可重现的东西 and/or 更明确,否则很难看出问题所在。只提"does not work"的报告通常是没有用的。
另请参阅 help varlist
中的关键字 _all
。
您正在使用本地宏。如果您 运行 按部分编写代码,则不要这样做。您需要一次性 运行 整个代码。阅读 [P] macro,了解详细信息。摘录:
Local macros exist solely within the program or do-file in which they
are defined. If that program or do-file calls another program or
do-file, the local macros previously defined temporarily cease to
exist, and their existence is reestablished when the calling program
regains control. When a program or do-file ends, its local macros are
permanently deleted.
您的命令有时 "does not work" 的一个常见原因是您 运行 逐行执行文件,而不是一次完成。本地宏是会话本地的(因此得名)。因此,如果您 运行 行 local allvar a b c d e
,那么这将创建该本地宏,并在 Stata 完成 运行 .do 文件的该部分后让它消失。有两种解决方案:
您可以养成 运行一次性定义局部宏及其使用的习惯。制作许多小的 .do 文件并使每个 .do 文件独立(例如参见 [=14=] 优秀书籍)实际上是一种很好的做法,因此您可以轻松地 运行 每个 .do 文件您想检查或更改某些内容的时间。
或者,您可以使用全局宏。这些在会话后继续存在。作为一个在Stata编程的人,使用全局宏会伤害我的眼睛,但我想如果你只使用Stata来分析数据,那伤害不大。
顺便说一句,allvar
似乎不是该局部宏的正确名称:它不包含所有变量,因为它排除了变量 f。这听起来很迂腐(确实如此),但使用能够准确描述其内容的名称是一种很好的做法。在一个真实的项目中,我们往往会在一段时间后回过头来。一个常见的场景是,你向期刊提交了一篇论文,花了半年或更长时间才收到审稿意见,现在你需要 "read" 你自己的 .do-file 来了解你做了半年的事情一年前。那时你很高兴你在写 .do 文件时迂腐...
另外,假设 a b c d e f
确实是数据集中的所有变量,您还可以使用以下方法创建本地变量:
ds f, not
local rhs `r(varlist)' // rhs short for right-hand side
我想在一个新的局部变量中存储一个变量名列表,这样我就不必为每个回归输入一长串变量名。我正在使用 Stata 14。
例如,我有以下 5 个自变量:a b c d e
和一个因变量:f
我不想:
regress f a b c d e
但我想要这样的东西:
regress f allvar
如何生成 allvar
?
不幸的是,这不起作用
local allvar a b c d e
以下工作正常。
clear
set more off
sysuse auto
// first regressions
regress price mpg rep78 weight
// second regression
local allvars mpg rep78 weight
regress price `allvars'
除非您向我们展示一些可重现的东西 and/or 更明确,否则很难看出问题所在。只提"does not work"的报告通常是没有用的。
另请参阅 help varlist
中的关键字 _all
。
您正在使用本地宏。如果您 运行 按部分编写代码,则不要这样做。您需要一次性 运行 整个代码。阅读 [P] macro,了解详细信息。摘录:
Local macros exist solely within the program or do-file in which they are defined. If that program or do-file calls another program or do-file, the local macros previously defined temporarily cease to exist, and their existence is reestablished when the calling program regains control. When a program or do-file ends, its local macros are permanently deleted.
您的命令有时 "does not work" 的一个常见原因是您 运行 逐行执行文件,而不是一次完成。本地宏是会话本地的(因此得名)。因此,如果您 运行 行 local allvar a b c d e
,那么这将创建该本地宏,并在 Stata 完成 运行 .do 文件的该部分后让它消失。有两种解决方案:
您可以养成 运行一次性定义局部宏及其使用的习惯。制作许多小的 .do 文件并使每个 .do 文件独立(例如参见 [=14=] 优秀书籍)实际上是一种很好的做法,因此您可以轻松地 运行 每个 .do 文件您想检查或更改某些内容的时间。
或者,您可以使用全局宏。这些在会话后继续存在。作为一个在Stata编程的人,使用全局宏会伤害我的眼睛,但我想如果你只使用Stata来分析数据,那伤害不大。
顺便说一句,allvar
似乎不是该局部宏的正确名称:它不包含所有变量,因为它排除了变量 f。这听起来很迂腐(确实如此),但使用能够准确描述其内容的名称是一种很好的做法。在一个真实的项目中,我们往往会在一段时间后回过头来。一个常见的场景是,你向期刊提交了一篇论文,花了半年或更长时间才收到审稿意见,现在你需要 "read" 你自己的 .do-file 来了解你做了半年的事情一年前。那时你很高兴你在写 .do 文件时迂腐...
另外,假设 a b c d e f
确实是数据集中的所有变量,您还可以使用以下方法创建本地变量:
ds f, not
local rhs `r(varlist)' // rhs short for right-hand side