我想在一个新的局部变量中存储一个变量名列表,这样我就不必为每个回归键入一个长变量名列表。我正在使用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
答案 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