簡體   English   中英

循環內的局部宏

[英]Local macros inside a loop

我正在運行面板回歸,因此我必須嘗試變量的組合。

我一直在嘗試運行以下代碼:

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版。

報價不好。 他們應該是:

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命令,但這是明智使用的方法。

正如@Roberto Ferrer正確指出的那樣,這里沒有可復制的內容。 確實,“ Stata拒絕承認……”的說法只是用擬人化的措詞表達的,其本身並不能弄清楚正在發生的事情。 但是,問題的關鍵似乎在於本地宏對於正在執行的代碼不可見。

局部宏的基本錯誤非常普遍,因此值得一個答案,即使即使不是OP問題的答案,它也是許多可能以相似標題發布的問題的答案。

局部宏對於定義它們的空間是局部的,這恰好意味着

  • 主要的互動環節

  • 特定程序

  • 一個特定的文件

  • 特定執行文件編輯器窗口的內容(的一部分)

請注意,最后一個中的“(部分)”確實可以咬人,例如(例如)您分別執行代碼塊時。 被引用的本地宏的定義必須在同一代碼空間內對Stata可見。

在該空間之外,局部宏將是不可見的,這意味着對它們的引用將被解釋為引用了不存在的宏,並且空字符串是非法的。 引用不存在的宏本身並不是非法的,但是結果語句可能是非法的,或者可能只是不執行用戶想要的操作,這大概就是這里的情況。

要測試本地宏的問題,您可以

  1. set trace on以查看代碼的逐行解釋。 如果用空代碼替換宏引用,則Stata無法看到本地宏; 它們確實不是本地的,而是代碼中的其他位置。

  2. 嘗試在使用宏之前display它們。 與#1故事相同。

  3. 使用macro list可以列出(適用於您的代碼的)Stata已知的(全局和)本地宏。 與#1故事相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM