簡體   English   中英

只讀取R中Stata .DTA文件的一部分

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM