如何在Stata中存储多个变量名?

时间:2015-06-08 02:57:15

标签: variables local 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 

2 个答案:

答案 0 :(得分:2)

以下工作正常。

clear
set more off

sysuse auto

// first regressions
regress price mpg rep78 weight

// second regression
local allvars mpg rep78 weight
regress price `allvars'

除非您向我们展示可重复和/或更明确的内容,否则很难看出问题所在。仅提及"的报告不起作用"通常没用。

另请参阅_all中的关键字help varlist

您使用的是本地宏。如果您按部分运行代码,那么就不要这样做。您需要一次运行整个代码。有关详细信息,请阅读[P] macro。摘录:

  

本地宏仅存在于程序或do-file中   定义。如果该程序或do-file调用另一个程序或   do-file,先前定义的本地宏暂时停止   存在,并且在调用程序时重新建立它们的存在   重新获得控制权。当程序或文件结束时,它的本地宏是   永久删除。

答案 1 :(得分:1)

您的命令有时“不起作用”的一个常见原因是您逐行运行do-file,而不是一次性运行。本地宏是会话的本地宏(因此名称)。因此,如果您运行了行local allvar a b c d e,那么这将创建该本地宏,并在Stata完成运行.do文件的该部分后立即让它消失。有两种解决方案:

您可以养成一次运行本地宏定义及其使用的习惯。实际上,制作许多小.do文件并使每个.do文件都自包含(例如参见this优秀书籍)是一种很好的做法,因此您可以轻松地每次运行整个.do文件检查或改变一些东西。

或者,您可以使用全局宏。这些在会议后继续存在。作为在Stata中编程的人,使用全局宏会伤害我的眼睛,但我想如果你只使用Stata来分析数据那么它就没什么坏处。

作为一个助手,allvar似乎不是该本地宏的正确名称:它不包含所有变量,因为它排除了变量f。这听起来很迂腐(并且确实如此),但使用准确描述其内容的名称是一种好习惯。在一个真实的项目中,我们倾向于在一段时间后回到它。一个常见的情况是你向期刊提交了一篇论文,评论需要半年或更长时间才能进入,现在你需要“阅读”你自己的.do文件来了解你半年前所做的事情。 。那时你很高兴在编写.do文件时你很迂腐......

作为进一步的帮助,假设a b c d e f确实是数据集中的所有变量,您还可以使用以下方式创建本地:

ds f, not
local rhs `r(varlist)' // rhs short for right-hand side