[英]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可見。
在該空間之外,局部宏將是不可見的,這意味着對它們的引用將被解釋為引用了不存在的宏,並且空字符串是非法的。 引用不存在的宏本身並不是非法的,但是結果語句可能是非法的,或者可能只是不執行用戶想要的操作,這大概就是這里的情況。
要測試本地宏的問題,您可以
set trace on
以查看代碼的逐行解釋。 如果用空代碼替換宏引用,則Stata無法看到本地宏; 它們確實不是本地的,而是代碼中的其他位置。
嘗試在使用宏之前display
它們。 與#1故事相同。
使用macro list
可以列出(適用於您的代碼的)Stata已知的(全局和)本地宏。 與#1故事相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.