2014-11-06 2219 views
0

我剛開始研究一個擁有500萬觀測值和大量變量的海量數據集。爲了更快地處理這個問題,我只想選擇一些感興趣的變量,然後放棄其他的變量。在多個變量塊上使用Stata的keep命令

keep,我可以選擇的變量塊,很簡單:

keep varx1-x5 

不過,我想這些變量是不是爲了在數據集:

varx1 varx2 varx3 varz1 varz2 vary1 vary2 vary3 

在哪裏我不t想要varz變量。我只想要varxvary的區塊。

所以。我不是在循環很好,但我想這一點:

foreach varname of varlist varx1-varx3 vary1-vary3 { 
keep `varname' 
} 

這是不行的,因爲它keep唯一varx1,然後嘗試keep別人,和錯誤,因爲他們剛剛去過drop PED。

如何告訴keep選擇多個變量塊?

回答

1

如果你不知道你要刪除的變量,只保留塊與varxvary

keep varx* varz* 

*手段「匹配零個或多個」前面的表達。

+0

在這種情況下'*'的陳述意義不正確。對於正則表達式來說很好,但這裏只是表示所有以'varx'開頭的變量都是後綴。例如:'varx1','varx2','varxwhatever'。 'help varlist'的引用是「匹配一個或多個字符」。 (原始的海報希望保留'varx *'和'vary *',而不是'varz *'。) – 2014-11-06 17:03:33

+0

當然。多麼愚蠢,我沒有想到這一點。謝謝! – emilBeBri 2014-11-07 08:29:48

2

而不是使用keep這將消滅變量不給命令,嘗試drop,它將只刪除您指定的那些。循環不是必需的。舉個例子:

clear 
set obs 0 

*----- example vars ----- 

gen varx1 = . 
gen varx2 = . 
gen varx3 = . 
gen varz1 = . 
gen varz2 = . 
gen vary1 = . 
gen vary2 = . 
gen vary3 = . 

*----- what you want ----- 

drop varz* 

兩個命令都記錄聯合,所以help keephelp drop就會有得到你。

+0

謝謝您的回覆。但是,使用我的數據刪除不是一個選項。我給出的例子是我必須處理的大量變量的一個非常簡單的版本。所以下降的過程非常耗時。它更有意義選擇/保留:) – emilBeBri 2014-11-07 08:18:05

+1

你有**這個斷言的任何證據嗎?無論您要求的變量還是您不想要的變量,數據集的結果都是一樣的。爲什麼認爲它對Stata很重要? – 2014-11-08 18:41:38