【问题标题】:Stata: wildcard with exceptions in egen functionsStata:通配符在 egen 函数中有例外
【发布时间】:2014-04-10 20:47:32
【问题描述】:

我是使用宏的新手,我想将此 "Wildcard with exceptions" syntax 合并到 Stata 12 中的 egen 函数中。我想做一些类似的事情:

foreach i in E F G {
    unab all`i' : V_`i'*
    unab excl`i' : V_`i'9*
    local general`i' : list all`i' - excl`i'
} 

egen Exp_operating = rowtotal(`generalE')
egen Exp_capital = rowtotal(`generalF' `generalG') 

换句话说,我想创建一个 V_E* 的变量列表,其中不包括变量 V_E9*,然后为每个观察创建一个等于该列表中每个变量的总和的变量。但是,执行egen 命令后出现语法错误。有人可以帮我弄清楚如何做我想做的事吗?

【问题讨论】:

  • 这只是为了提醒未来的读者,这里使用 egen 与 OP 的问题无关,这似乎完全集中在对 local 宏的误解。

标签: function stata


【解决方案1】:

一些技术代码:

clear all
set more off

*----- example data -----

set obs 1

gen V_E1 = 1
gen V_E2 = 2
gen V_E22 = 2
gen V_E3 = 3

gen V_F1 = 3
gen V_F2 = 4
gen V_F22 = 4
gen V_F3 = 5

*----- what you seek -----

foreach i in E F {
    unab all`i' : V_`i'*
    unab excl`i' : V_`i'2*
    local general`i' : list all`i' - excl`i'
} 

* display contents of macros 
display "`generalE'"
display "`generalE' `generalF'"

* sum of V_E1 V_E3
egen Exp_operating = rowtotal(`generalE')

* sum of V_E1 V_E3 V_F1 V_F3
egen Exp_capital = rowtotal(`generalE' `generalF') 

list

在将宏传递给egen 之前,使用display 检查宏的内容。

【讨论】:

  • 对不起,如果这是一个愚蠢的问题,但是您在执行egen 命令后没有收到语法错误吗?我很确定我的语法和你的一样,但是每当我执行它时我都会收到一个invalid syntax r(198) 错误。看到您的回答后,我将 display 命令添加到循环中,以确认宏执行了我想要的操作,因此为此 +1。
  • 这并不傻,因为我没有说它是经过测试的代码,但实际上它是。 对我来说没有错误search r(198) 给出“这些错误通常是由于印刷错误,但并非总是如此。你确定它们是一样的吗?你是从屏幕上复制/粘贴的吗?
  • 宏周围的引号有时会产生问题,因为它们看起来是正确的,但实际上并非如此。
  • 事实上,我现在看到您发布的内容和我发布的内容实际上是相同的代码(在我最后一次编辑之后)。您可以发布Stata窗口中显示的确切输入/输出吗?您使用的是什么版本的 Stata?
  • 是的,我四次检查了我的代码是否有错别字,但仍然无法弄清楚,所以我只是复制并粘贴了你的代码,它运行良好。谢谢!我正在使用 Stata 12。
猜你喜欢
  • 2019-11-04
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 2012-10-11
  • 2014-05-05
  • 1970-01-01
相关资源
最近更新 更多