如何在 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