【问题标题】:How do I use a local macro referencing a variable?如何使用引用变量的本地宏?
【发布时间】:2017-03-28 22:01:10
【问题描述】:

我正在尝试在 Stata 中创建一个宏,该宏将设置一个变量名称供我稍后在我的 do 文件中引用。本质上,我正在尝试用本地宏替换变量名。

示例数据集如下:

ID   Indicator1 Indicator2    Amount
1    1            0             10
2    0            1             2
3    0            0             3
4    1            0             5
5    1            1             20

我的数据有许多指标,但我一次只需要使用一个指标。我想将我当前正在使用的指标放入一个宏中,这样我只需在整个代码中更改一件事。

我的代码是:

local myvar = "Indicator"

我想要的是能够使用这样的东西:

sum Amount if "`myvar'" == 1

但是,即使 myvar 已定义,我仍不断收到错误消息 "type mismatch"

【问题讨论】:

    标签: variables stata local stata-macros


    【解决方案1】:

    通过输入任何这些

    local myvar "Indicator" 
    

    local myvar = "Indicator" 
    

    local myvar Indicator 
    

    您将文字文本Indicator 放在名称为myvar 的本地宏中。此示例中的 " " 是分隔符,如上一个示例所示,在这种情况下可有可无。到现在为止还挺好。

    但是,在 summarize 语句中使用 " " 向 Stata 表明您打算将评估(取消引用)本地宏的结果视为文字字符串;并且文字字符串只能与另一个文字字符串或字符串变量的内容进行比较,由其名称指示。因此出现错误消息type mismatch

    所以,这是合法的:

    sum Amount if "`myvar'" == "1"
    

    什么都不会发生,因为"indicator" 不等于"1",所以该语句将是错误的(在尝试的每个观察中)。但 Stata 的语法没有问题。

    但这不是你想要的。您希望将本地宏内容视为变量名,这意味着编写

    sum Amount if `myvar' == 1 
    

    本地宏已经定义的事实在这里无关紧要;它使用不当。

    【讨论】:

    • 谢谢。我尝试使用 sum Amount if ``myvar' == 1` 并且这次错误显示==1 invalid name,即使它已被定义。
    • 这可能意味着本地宏此时不可见。这是在块中运行 do-file 的常见副作用,例如一次一行。本地意味着它所说的:本地(对于一段代码)。要进行测试,请在尝试使用宏之前尝试显示宏:macro list 会这样做或di "`myvar'"。补救方法是不要以块的形式运行文件,也不要在任何情况下确保local 定义可见。
    • 哦,好吧。问题是我正在分块运行do-file。现在可以了。 :)
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多