我想將一個變量名稱列表存儲在一個新的局部變量中,這樣我就不必爲每個迴歸鍵入一長串變量名稱。我使用的Stata 14如何在Stata中存儲多個變量名?
例如,我有以下5個獨立的變量:a b c d e
和一個因變量:f
我不想:
regress f a b c d e
但我想是這樣的:
regress f allvar
我該如何生成allvar
? 不幸的是,這是行不通的
local allvar a b c d e
我想將一個變量名稱列表存儲在一個新的局部變量中,這樣我就不必爲每個迴歸鍵入一長串變量名稱。我使用的Stata 14如何在Stata中存儲多個變量名?
例如,我有以下5個獨立的變量:a b c d e
和一個因變量:f
我不想:
regress f a b c d e
但我想是這樣的:
regress f allvar
我該如何生成allvar
? 不幸的是,這是行不通的
local allvar a b c d e
以下工作正常。
clear
set more off
sysuse auto
// first regressions
regress price mpg rep78 weight
// second regression
local allvars mpg rep78 weight
regress price `allvars'
除非您向我們展示重現性和/或更明確的內容,否則很難看出問題所在。只提到「不起作用」的報告通常沒有用處。
另請參閱關鍵字_all
的help varlist
。您正在使用本地宏。如果您正在按部分運行代碼,則不要。你需要一次運行整個代碼。閱讀[P] macro,瞭解詳情。摘錄如下:
本地宏只存在於其中定義了 的程序或do-file中。如果該程序或do-file調用另一個程序或do-file,則先前定義的本地宏暫時停止爲 ,並且當調用程序 重新獲得控制權時,它們的存在會重新建立。當程序或do-file結束時,其本地宏將永久刪除 。
爲什麼你的命令有時「不起作用」的一個常見原因是你一行一行地運行你的do-file,而不是一次一個地運行。本地宏是會話的本地(因此名稱)。因此,如果您運行local allvar a b c d e
,那麼這將創建該本地宏,並在Stata完成運行.do文件的該部分後立即放棄它。有兩種解決方案:
您可以習慣於一次運行本地宏定義和它們的使用。實際上,製作許多小型.do文件並使每個.do文件自成一體(例如參見this優秀書)是一種很好的做法,因此,您可以在每次要檢查或更改某些內容時輕鬆運行整個.do文件。
或者,您可以使用全局宏。這些在會議後繼續存在。作爲在Stata中編程的人,使用全局宏會傷害我的眼睛,但我想如果您僅使用Stata來分析數據,那麼這種做法沒有什麼害處。
作爲一個幫助,allvar
似乎不是一個正確的名稱爲該本地宏:它不包含所有變量,因爲它排除變量f。這聽起來很迂腐(而且確實是),但使用能夠準確描述其內容的名稱是一種很好的做法。在一個真實的項目中,我們傾向於在一段時間後回到它。一個常見的情況是,你向論文提交了一篇論文,評論進來需要半年或更長的時間,現在你需要「閱讀」你自己的.do-file來理解半年前你做了什麼。在這一點上,你很高興,你寫。做文件時是迂腐......
作爲進一步asside,假設a b c d e f
確實在數據集中的所有變量,你也可以用在你的本地:
ds f, not
local rhs `r(varlist)' // rhs short for right-hand side
還要注意,正如在Roberto的回答中,正確的術語是「本地宏」,儘管在Stata上下文中「local」通常就足夠了。無論在其他軟件本地宏中的術語在Stata中都不被視爲變量,該術語被保留用於數據集中的字段或列。因此應避免使用術語「局部變量」。 –