循环内的本地宏

时间:2014-12-12 12:59:03

标签: for-loop stata stata-macros

我正在运行面板回归,我必须尝试组合变量。

我一直在尝试运行以下代码:

local x0 elec_qtr_dummy 
local x1 elec_qtr_dummy elec_qtr_1b 
local x2 elec_qtr_dummy elec_qtr_1b elec_qtr_2b 
local x3 elec_qtr_dummy elec_qtr_1b elec_qtr_2b elec_qtr_3b 
local x4 elec_qtr_dummy elec_qtr_1b elec_qtr_2b elec_qtr_3b elec_qtr_4b 
local x5 elec_qtr_dummy elec_qtr_1b elec_qtr_2b elec_qtr_3b elec_qtr_4b elec_qtr_1a elec_qtr_2a 
local x6 elec_qtr_dummy elec_qtr_1b elec_qtr_2b elec_qtr_3b elec_qtr_4b elec_qtr_5b elec_qtr_6b

xtset companyid 

forvalue v = 0/6 {  

    eststo,title("log_stqf_deal"): xi: xtreg log_stqf_deal `x`v'' i.year,fecluster(state_code)
    est2vec table`v', e(N) vars(`x`v'') name(lstqf_deal) replace 

    eststo,title("log_totln"): xi: xtreg log_stqf_deal `x`v'' i.year,fe cluster(state_code)  
    est2vec table`v', addto(table`v') name(ltotln)

    est2rowlbl `x`v'', saving replace path(`file') addto(table`v')
    est2tex table`v', preserve path(`file') mark(starb)fancy levels(90 95 99) label replace 
    estimates clear
} 

但是,Stata拒绝承认forvalues循环内存在本地人。

如果有人可以指出一个有效的替代方案,那将是非常有帮助的。

我使用的是Stata 12.0版。

2 个答案:

答案 0 :(得分:1)

报价不好。他们应该是:

xi: xtreg log_stqf_deal `x`v'' i.year,fe

但是,我无法判断它们是否良好,并且您的原始格式混淆了它们。你应该确认。

一个工作示例:

clear
set more off

sysuse auto

local x0 mpg 
local x1 mpg rep78

forvalue v = 0/1 {
    reg price `x`v''
}

你没有引用Stata给你的错误,这是一件令人向往的事情。

您也可以查看stepwise命令,但这可以明智地使用。

答案 1 :(得分:1)

正如@Roberto Ferrer正确指出的那样,这里没有什么是可以重现的。事实上,“Stata拒绝承认......”的说法只是用拟人的术语表达,而这些术语本身并不能说明发生了什么。但问题的关键似乎是本地宏对正在执行的代码不可见。

本地宏的一个基本错误是如此常见以至于值得回答,因为即使它不是OP问题的答案,也是可能在类似标题下发布的许多问题的答案。

本地宏本地到它们所定义的空间,这恰恰意味着其中一个

  • 主要互动环节

  • 特定计划

  • 特定的文件

  • (部分)特定文件编辑器窗口的内容

请注意,最后的“(部分)”真的可以咬人,就像(例如)你分别执行代码块一样。所引用的本地宏的定义必须在同一代码空间内对Stata可见。

在该空间之外,本地宏将是不可见的,这意味着对它们的引用将被解释为引用不存在的宏和空字符串非法。引用不存在的宏本身并不违法,但结果语句可能是非法的,或者可能不是用户想要的,这可能是这里的情况。

要测试本地宏的问题,您可以

  1. set trace on查看代码的逐行解释。如果宏引用被空代码替换,则Stata无法看到本地宏;它们确实不是本地的,而是代码中的其他地方。

  2. 在使用之前尝试使用display个宏。与#1相同的故事。

  3. 使用macro list列出适用于您的代码的Stata已知的(全局和)本地宏。与#1相同的故事。