我會建議使用describe
和一些擴展宏功能的組合。假設你有兩個你想比較的.dta文件,set1和set2。
然後,您可以做線沿線的東西:
describe set1, varlist
local set1vars `r(varlist)'
describe set2, varlist
local set2vars `r(varlist)'
local both : list set1vars & set2vars
這將創建一個本地宏,both
,其中包含與存在於兩個數據集的變量名的字符串。在keep
命令中使用此宏,以僅在keep
中存在兩個集合中的變量。
更詳盡的例子看起來是這樣的:
local keeplist "make mpg foreign price"
/* Describe auto dataset */
describe using "C:/Program Files (x86)/Stata13/ado/base/a/auto.dta", varlist
local setlist1 `r(varlist)'
local keep : list keeplist & setlist1
tempfile auto
use `keep' using "C:/Program Files (x86)/Stata13/ado/base/a/auto.dta"
save `auto'
describe using "C:/Program Files (x86)/Stata13/ado/base/a/autornd.dta", varlist
local setlist2
local keep : list keeplist & setlist2
use `keep' using "C:/Program Files (x86)/Stata13/ado/base/a/autornd.dta", clear
/* Do whatever you want with now similar datasets */
* i.e.,
merge 1:1 make using `auto'
注意,在上面的例子可以發出對數據describe
無需讀取到內存中。從這個邏輯開始,就像@Brendan Cox所說的那樣,把它併入一個循環是很容易的。
其他選項涉及unab
和cfvars
(可從ssc獲得)。
有關該主題的更多討論,請參見類似問題here。
我也想知道這一點。 – Frank
'isvar'(SSC)將名單過濾爲變量和其他名稱的列表。 –