[英]Reading in only part of a Stata .DTA file in R
如果在某處有一個簡單的答案,我會提前道歉。 這似乎是那樣的事情,但我似乎無法通過搜索SO或谷歌搜索在幫助文件中找到它。
我現在正在使用幾個GB的數據集。 它足以適應我有權訪問的其中一個集群節點的內存,但需要花費相當多的時間來加載。 對於使用此數據的許多調試/編程活動,我不需要加載整個文件,只需要在前幾千個觀察點上有一個數據集來測試代碼。 我當然可以讀取整個文件和子集,但我想知道是否有辦法告訴read.dta()
只讀取前N行? 這當然要快得多。
我也可以使用像.csv這樣的正確格式,然后使用read.csv()
的nrows參數,但后來我在Stata數據集中丟失了因子標簽(並且必須從別人的數據庫中重新創建相當多的GB數據)代碼正在為這個項目提供支持。因此,首選.dta文件的直接解決方案。
塔塔的二進制文件被寫入一行一行地,所以你可以改變R_LoadStataData
在功能上stataread.c
限制讀取的行數。但是,如果你是因為他們在書面不需要值標簽這只會工作文件的結尾,並要求您讀取整個文件 - 這不會節省任何時間。
這將是一個困難的,因為do_readStata
下的do_readStata
函數是編譯代碼,只能接收整個文件。 我相信一般二進制文件很難逐行讀取,而.dta
是二進制格式。 此外,R的本機二進制格式不允許在讀入時從數據集中選擇多行。
在我看來,您可以更好地從Stata中創建一組測試文件(例如,Stata代碼sample 1000, count
將為您提供來自已加載數據集的1000個觀測值的樣本),並使用它們。 如果您無法訪問Stata,項目中的其他人應該能夠為您執行此操作。
跟進Joris Meys:對於這種事情,我使用“測試”數據集和“真實”數據集,每個數據集都在不同的文件夾中。 我在.do文件的頂部(使用下面的if / then語句)保留一個宏,以(1)獲取數據樣本,(2)將輸入/輸出指向包含其中一個或另一個的右側文件夾。 我可能會為每個項目做不同的事情,但是這樣的事情:
數據創建.do文件
blah blah blah
save using data/myfile.dta
save if uniform()<.05 using test_data/myfile.dta // or bsample, then save for panel data
分析.do文件
local test = "test_"
// when you're ready to run the file with all the data, use the following
// local test = ""
use `test'data/myfile.dta
blah blah blah
outreg2 ... using `test'output/mytable.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.