2015-06-08 32 views
0

我想將一個變量名稱列表存儲在一個新的局部變量中,這樣我就不必爲每個迴歸鍵入一長串變量名稱。我使用的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 

回答

2

以下工作正常。

clear 
set more off 

sysuse auto 

// first regressions 
regress price mpg rep78 weight 

// second regression 
local allvars mpg rep78 weight 
regress price `allvars' 

除非您向我們展示重現性和/或更明確的內容,否則很難看出問題所在。只提到「不起作用」的報告通常沒有用處。

另請參閱關鍵字_allhelp varlist。您正在使用本地宏。如果您正在按部分運行代碼,則不要。你需要一次運行整個代碼。閱讀[P] macro,瞭解詳情。摘錄如下:

本地宏只存在於其中定義了 的程序或do-file中。如果該程序或do-file調用另一個程序或do-file,則先前定義的本地宏暫時停止爲 ,並且當調用程序 重新獲得控制權時,它們的存在會重新建立。當程序或do-file結束時,其本地宏將永久刪除 。

+0

還要注意,正如在Roberto的回答中,正確的術語是「本地宏」,儘管在Stata上下文中「local」通常就足夠了。無論在其他軟件本地宏中的術語在Stata中都不被視爲變量,該術語被保留用於數據集中的字段或列。因此應避免使用術語「局部變量」。 –

1

爲什麼你的命令有時「不起作用」的一個常見原因是你一行一行地運行你的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