9
votes

Lecture dans une seule partie d'un fichier stata .dta dans r

Je m'excuse à l'avance si cela a une réponse simple quelque part. Cela semble être le genre de chose qui pourrait, mais je ne peux pas sembler la localiser dans les fichiers d'aide, en les recherchant, ou par Googling.

Je travaille avec des jeux de données de plusieurs Go en ce moment. Il suffit de s'adapter à la mémoire sur l'un des nœuds de cluster que j'ai accès, mais prend un peu de temps à charger. Pour de nombreuses activités de débogage / de programmation avec ces données, je n'ai pas besoin de l'ensemble du fichier chargé, juste des premières milliers d'observations pour avoir un jeu de données sur lequel tester le code. Je peux bien sûr juste lire tout le dossier dans et le sous-ensemble, mais je me demandais s'il y a un moyen de dire lis.dta () pour lire uniquement dans les premières lignes? Ce serait bien sûr beaucoup plus rapide.

Je pourrais également utiliser un format approprié comme .csv, puis utiliser lis.csv () "STROWS NROWS, mais je perdrais ensuite les étiquettes des facteurs de l'ensemble de données STATA (et je dois Recréez assez de 1 Go de données du code de quelqu'un d'autre qui se nourrit de ce projet. Donc, une solution directe sur les fichiers .DTTA est préférée.


1 commentaires

Il pourrait s'agir de la peine de pointer votre statut-collègue en utilisant la fonction de la fonction sur la fonction pour l'exportation vers la CSV. Un peu tard pour ce projet peut-être, mais cela pourrait faciliter la prochaine fois que vous travaillez ensemble. ATS.ULA.EDU/STAT/STATA/FAQ/OUTATSHEET.HTM < / a>


3 Réponses :


7
votes

Ça va être difficile, car la fonction do_readstata sous la hotte est compilée du code, uniquement capable de prendre dans l'ensemble du fichier. Je crois que dans les fichiers binaires généraux sont difficiles à lire la ligne par ligne et .dta est un format binaire. De plus, le format binaire natif de R ne permet pas de sélectionner un nombre de lignes à partir du jeu de données tout en lisant.

Dans mon humble avis, vous pouvez mieux créer un ensemble de fichiers de test à partir de STATA (par exemple, le code STATA Sample 1000, comptage vous donnera un échantillon de 1000 observations de l'ensemble de données chargé) et travailler avec eux. Et si vous n'avez pas accès à Stata, quelqu'un d'autre dans le projet devrait pouvoir le faire pour vous.


2 commentaires

Bummer, mais merci. J'imagine que c'est théoriquement possible, cependant, parce que vous pouvez le faire dans Stata avec quelque chose comme utiliser myfile.dta dans 1/1000 . J'essaie de m'en tenir autant que possible, mais je peux juste aller Stata-ize les ensembles de test.


@ GSK3: Il est possible que Joshua a expliqué que Joshua a expliqué, mais vous devez trouver un moyen de lire la fin du fichier aussi pour obtenir les étiquettes.



9
votes

Les fichiers binaires de Stata sont écrits par ligne à ligne, de sorte que vous pouvez modifier la fonction r_loadstatatatatata dans stataread.c pour limiter le nombre de lignes lues. Toutefois, Cela ne fonctionnera que si vous n'avez pas besoin des étiquettes de valeur, car ils sont écrits à la fin du fichier et vous demanderaient de lire l'ensemble du fichier - qui ne sauverait aucun moment.


0 commentaires

1
votes

Suivi de Joris Meys: Pour ce genre de chose, j'utilise un ensemble de données "test" et le jeu de données "réel", chacun dans des dossiers distincts. Je garde une macro en haut du fichier .do (avec des instructions si / puis des instructions ci-dessous) à (1) prendre un échantillon des données et (2) entrée / sortie du point / sortie dans le dossier droit contenant l'une ou l'autre. Je le fais probablement différent pour chaque projet, mais quelque chose comme ceci:

Création de données. Dossier Strong> P>

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


0 commentaires