其實我找到了解決辦法。如果您運行
use mybigdata if runiform() <= 0.0001
Stata將隨機採樣0.0001的數據集而不讀取整個數據集。
謝謝!
文森特
編輯:2015年4月28日(下午1:58 EST) 我道歉。原來上面實際上是而不是原始問題的解決方案。看來在我的系統上使用的速度有很大的變化。每次我運行它時,使用的速度都不一樣。當我發佈上述解決方案時,我認爲當我運行代碼時,它恰好是一個更快的實例。然而,正如我現在重複運行
use mybigdata if runiform() <= 0.0001
與
use in 1/5 using mydata
其實我發現
use in 1/5 using mydata
平均爲快。
一般來說,我的問題是如何讀取Stata數據集的一部分,而不必爲了計算目的而讀取整個數據集,特別是當數據集非常大時。
編輯:2015/4/28(2:50 PM EST) 總的來說,我有20個數據集,每個數據集有5到1500萬個觀察值。我只需要保留8個變量(每個數據集中有58-65個變量)。以下是前四個「描述性短」陳述的輸出。
2004 action1
Contains data from 2004action1.dta
obs: 15,039,576
vars: 64 30 Oct 2014 17:09
size: 2,827,440,288
Sorted by:
2004 action2578
Contains data from 2004action2578.dta
obs: 13,449,087
vars: 59 30 Oct 2014 17:16
size: 2,098,057,572
Sorted by:
2005 action1
Contains data from 2005action1.dta
obs: 15,638,296
vars: 65 30 Oct 2014 16:47
size: 3,143,297,496
Sorted by:
2005 action2578
Contains data from 2005action2578.dta
obs: 14,951,428
vars: 59 30 Oct 2014 17:03
size: 2,362,325,624
Sorted by:
謝謝!
文森特
這是你已經找到了一個解決方案是一件好事,但坦率地說,我不明白爲什麼工程。我相信你的代碼行爲每個觀察計算一個隨機數,然後將它與'0.0001'進行比較,並相應地包含觀察結果。所以這涉及檢查每個觀察,即整個數據集。事實上,在我的機器上進行的測試表明,這需要花費兩倍的時間。第二點是你的原始問題沒有提到你想要一個隨機樣本;你可能想編輯它。第三點是你得到的觀察數量是可變的。第四點,用'set seed'重新編程。 –
嗨羅伯託。謝謝你的幫助。事實上,我剛剛編輯了我的回答,以迴應您的帖子,並且我意識到我實際上並未找到解決方案。詳情請參閱我的編輯;不過,我絕對感謝你的提示和建議! – Vincent
沒問題。只是好奇:您的原始數據集有多少觀察值和變量?你應該在原文中提供'describe,short'的輸出。你需要保留所有變量嗎?你使用了多少個文件? –