【问题标题】:How to store several variable names in Stata?如何在Stata中存储几个变量名?
【发布时间】:2015-06-08 02:57:15
【问题描述】:

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

【问题讨论】:

    标签: variables local stata


    【解决方案1】:

    以下工作正常。

    clear
    set more off
    
    sysuse auto
    
    // first regressions
    regress price mpg rep78 weight
    
    // second regression
    local allvars mpg rep78 weight
    regress price `allvars'
    

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

    另见help varlist中的关键字_all

    您正在使用本地宏。如果您按部分运行代码,则不要。您需要一次运行整个代码。阅读[P] macro,了解详情。摘录:

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

    【讨论】:

    • 另请注意,正如在罗伯托的回答中,正确的术语是 local macro 尽管 local 在 Stata 上下文中通常就足够了。无论其他软件本地宏中的术语是什么,在 Stata 中都不会被视为变量,该术语是为数据集中的字段或列保留的。因此应避免使用“局部变量”一词。
    【解决方案2】:

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

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

    或者,您可以使用全局宏。这些在会话后继续存在。作为一个在 Stata 中编程的人,使用全局宏会伤害我的眼睛,但我想如果你只使用 Stata 来分析数据,它几乎没有伤害。

    顺便说一句,allvar 似乎不是该本地宏的正确名称:它不包含所有变量,因为它不包括变量 f。这听起来很迂腐(确实如此),但使用能够准确描述其内容的名称是一种很好的做法。在一个真实的项目中,我们往往会在一段时间后回到它。一个常见的场景是你投了一篇论文给期刊,半年甚至更长时间才收到review,现在你需要“阅读”你自己的.do-file来了解你半年前做了什么.那时你很高兴你在编写 .do 文件时很迂腐...

    另外,假设 a b c d e f 确实是数据集中的所有变量,您也可以使用以下方法创建本地变量:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2013-01-14
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      相关资源
      最近更新 更多