2014-06-16 16 views
5

Ich versuche, eine .sas7bdat Datei in R. zu lesen, wenn ich denread.sas7bdat derzeit keine komprimierte Datei lesen

Befehl
library(sas7bdat) 
read.sas7bdat("filename") 

ich die folgende Fehlermeldung erhalten:

Error in read.sas7bdat("county2.sas7bdat") : file contains compressed data 

ich tun keine Erfahrung mit SAS, daher wird jede Hilfe sehr geschätzt.

Danke!

Antwort

5

Nach der sas7bdat Vignette [vignette('sas7bdat')], COMPRESS=BINARY (oder COMPRESS=YES) wird ab dem Jahr 2013 werden derzeit nicht unterstützt (und dies war die Vignette aktiv am 2014.06.16, als ich dies schrieb). COMPRESS=CHAR wird unterstützt.

Hierbei handelt es sich im Wesentlichen um interne Komprimierungsroutinen, die Dateigrößen verringern sollen. Sie sind nicht so gut wie gz oder ähnlich (nicht fast als gut), aber sie werden von SAS beim Schreiben von SAS-Programmen transparent unterstützt. Offensichtlich ändern sie das Dateiformat erheblich, daher der Mangel an Implementierung.

Wenn Sie SAS haben, müssen Sie diese in ein unkomprimiertes Dataset schreiben.

options compress=no; 
libname lib '//drive/path/to/files'; 
data lib.want; 
set lib.have; 
run; 

, dass der einfachste Weg ist (von vielen), vorausgesetzt, Sie einen libname als lib definiert haben, wie oben und have und want zu den Namen ändern, die richtig sind (have soll der Dateiname ohne Erweiterung der Datei sein, in den meisten Fälle; want kann auf alles logisch mit AZ oder Unterstrich und 32 oder weniger Zeichen geändert werden).

Wenn Sie kein SAS haben, müssen Sie Ihre bereitgestellten Daten fragen, um die Daten unkomprimiert oder in einem anderen Format verfügbar zu machen. Wenn Sie dies von einem PUDS irgendwo im Internet erhalten, können Sie es dort veröffentlichen, wo Sie es erhalten, und es könnte eine Möglichkeit geben, Ihnen bei der Identifizierung einer unkomprimierten Quelle zu helfen.

+0

Ich habe keine SAS aber gut zu wissen.Ich muss es vielleicht versuchen. Vielen Dank! – user3641630

+0

Als zukünftige Referenz unterstützen dsread und DsShell (beide unter http://www.oview.co.uk verfügbar) komprimierte Datensätze mit BIN- oder CHAR-Komprimierung. –

3

"RevoScaleR" ist ein gutes Paket zum Lesen von SAS-Datensätzen (komprimiert oder unkomprimiert). Sie können rxImport Funktion dieses Pakets verwenden. Unten ist das Beispiel

importieren Bibliothek

library(RevoScaleR) 

Lesen von Daten

R_df_name <- rxImport("fake_path/file_name.sas7bdat") 

Die Geschwindigkeit dieser Funktion ist weit besser als haven/sas7bdat/sas7bdat.parso. Ich hoffe, das hilft jedem, der Probleme hat, SAS-Datensätze in R.

zu lesen. Prost!

+0

Beachten Sie, dass das Paket 'RevoScaleR' nicht verfügbar ist (für R Version 3.4.1) –

+0

RevoScaleR ist Teil von Microsoft R-Paketen. – Atendra

2

Dies ist zugegebenermaßen keine R-basierte Lösung, aber Python hat ein Modul (https://pypi.python.org/pypi/sas7bdat), das das Lesen komprimierter SAS-Datensätze unterstützt - es ist sicherlich besser, als SAS zu erwerben, wenn Sie es noch nicht haben. Sobald Sie die Datei extrahieren und speichern Sie es über Python in Text, können Sie zugreifen es dann in R.

from sas7bdat import SAS7BDAT 
import pandas as pd 

InFileName = "myfile.sas7bdat" 
OutFileName = "myfile.txt" 

with SAS7BDAT(InFileName) as f: 
    df = f.to_data_frame() 

df.to_csv(path_or_buf = OutFileName, sep = "\t") 
Verwandte Themen