Wenn ich ein Dataset unter Verwendung von PROC EXPORT
in das Stata-Format exportiere, fügt SAS 9.4 automatisch ein zusätzliches (leeres) Byte zu jeder Beobachtung jeder String-Variablen hinzu. Zum Beispiel in diesem Datensatz:Wie kann ich verhindern, dass SAS zu jeder String-Variablen ein zusätzliches leeres Byte hinzufügt, wenn ich PROC EXPORT verwende?
data test1;
input cust_id $ 1
month 3-8
category $ 10-12
status $ 14-14
;
datalines;
A 200003 ABC C
A 200004 DEF C
A 200006 XYZ 3
B 199910 ASD X
B 199912 ASD C
;
quit;
proc export data = test1
file = "test1.dta"
dbms = stata replace;
quit;
die Variablen cust_id
, category
und status
sollen str1
, str3
und str1
in der endgültigen Stata-Datei sein, und somit nehmen 1 Byte, 3 Byte und 1 Byte für jede Beobachtung. Jedoch fügt SAS jeder Beobachtung automatisch ein zusätzliches leeres Byte hinzu, das ihre Datentypen in den ausgegebenen STATA-Dateien auf den Datentyp str2
, str4
und str2
erweitert.
Dies ist äußerst problematisch, denn das ist ein zusätzliches Byte hinzugefügt jede Beobachtung von jedes String-Variable. Bei großen Datensätzen (ich habe einige mit ~ 530 Millionen Beobachtungen und zahlreichen String-Variablen) kann dies der exportierten Datei mehrere Gigabyte hinzufügen.
Sobald die Datei in Stata, der compress
Befehl in Stata können diese leeren Bytes automatisch geladen wird entfernt und die Datei schrumpfen, aber für große Datensätze, PROC EXPORT
fügt so viele zusätzliche Bytes in die Datei, die ich nicht immer haben genug Speicher, um das Dataset an erster Stelle in Stata zu laden.
Gibt es eine Möglichkeit, zu verhindern, dass SAS die String-Variablen an erster Stelle auffüllt? Wenn ich eine Datei mit einer Variablen mit einer Zeichenkette (zum Beispiel) exportiere, möchte ich, dass diese Variable als eine Zeichenkettenvariable in der Ausgabedatei gespeichert wird.
Ich vermute, SAS fügt einen String-Terminator hinzu, obwohl ich keine Ahnung habe. – Joe
Betrachtet man die Stata-Dokumentation, unterstützt sie '\ 0' String-Terminator (für" Varchar "-Typ Operation). Ich vermute, SAS legt das nach * jeder * Zeichenfolge einfach, wenn ich raten müsste.Ich würde empfehlen, ein Support-Ticket mit SAS-Tech-Support zu setzen; Sie können dies wahrscheinlich a) bestätigen und b) Sie wissen lassen, ob es einen Workaround gibt. Ich sehe keinen, der auf einem kurzen Blick basiert. – Joe
Und wenn Sie vom technischen Support von SAS zurückkommen - fügen Sie bitte eine Antwort mit allen Informationen hinzu, die Sie erhalten, also ist es für andere Suchende verfügbar! – Joe