Ich habe eine PROC EXPORT Frage, die ich frage mich, ob Sie antworten können.SAS: Begrenzende Variablen in PROC EXPORT
Ich habe ein SAS-Dataset mit 800+ Variablen und über 200K Beobachtungen und ich versuche, eine Teilmenge der Variablen in eine CSV-Datei zu exportieren (dh ich brauche alle Datensätze; Ich will nicht alle 800+ Variablen) . Ich kann immer ein temporäres Dataset "Keep" nur die Felder, die ich brauche, erstellen und EXPORT für dieses temporäre Dataset ausführen, aber ich versuche, den zusätzlichen Schritt zu vermeiden, weil ich eine große Anzahl von Datensätzen habe.
Um dies zu demonstrieren, betrachten Sie ein Dataset mit drei Variablen mit den Namen x, y und z. Aber ich möchte, dass die durch PROC EXPORT erzeugte Textdatei nur x und y enthält. Mein Versuch einer Lösung unten funktioniert nicht ganz.
Der SAS-Code
Wenn ich den folgenden Code ausführen, bekomme ich nicht genau, was ich brauche. Wenn Sie diesen Code ausführen und sich die generierte Textdatei ansehen, wird am Ende jeder Zeile ein Komma angezeigt, und der Header enthält sowieso alle Variablen im Dataset. Außerdem bekomme ich einige Nachrichten im Log, die ich nicht bekommen sollte.
Hier sind die ersten Zeilen der Textdatei, die erzeugt wurde ("C: \ test.csv")
x,y,z
1,1,
2,4,
3,9,
4,16,
Die SAS Log
9343 proc export data=ds1(keep=x y)
9344 file='c:\test.csv'
9345 dbms=csv
9346 replace;
9347 quit;
9348 /**********************************************************************
9349 * PRODUCT: SAS
9350 * VERSION: 9.2
9351 * CREATOR: External File Interface
9352 * DATE: 30JUL12
9353 * DESC: Generated SAS Datastep Code
9354 * TEMPLATE SOURCE: (None Specified.)
9355 ***********************************************************************/
9356 data _null_;
9357 %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
9358 %let _EFIREC_ = 0; /* clear export record count macro variable */
9359 file 'c:\test.csv' delimiter=',' DSD DROPOVER lrecl=32767;
9360 if _n_ = 1 then /* write column names or labels */
9361 do;
9362 put
9363 "x"
9364 ','
9365 "y"
9366 ','
9367 "z"
9368 ;
9369 end;
9370 set DS1(keep=x y) end=EFIEOD;
9371 format x best12. ;
9372 format y best12. ;
9373 format z best12. ;
9374 do;
9375 EFIOUT + 1;
9376 put x @;
9377 put y @;
9378 put z ;
9379 ;
9380 end;
9381 if _ERROR_ then call symputx('_EFIERR_',1); /* set ERROR detection macro variable */
9382 if EFIEOD then call symputx('_EFIREC_',EFIOUT);
9383 run;
NOTE: Variable z is uninitialized.
NOTE: The file 'c:\test.csv' is:
Filename=c:\test.csv,
RECFM=V,LRECL=32767,File Size (bytes)=0,
Last Modified=30Jul2012:12:05:02,
Create Time=30Jul2012:12:05:02
NOTE: 101 records were written to the file 'c:\test.csv'.
The minimum record length was 4.
The maximum record length was 10.
NOTE: There were 100 observations read from the data set WORK.DS1.
NOTE: DATA statement used (Total process time):
real time 0.04 seconds
cpu time 0.01 seconds
100 records created in c:\test.csv from DS1.
NOTE: "c:\test.csv" file was successfully created.
NOTE: PROCEDURE EXPORT used (Total process time):
real time 0.12 seconds
cpu time 0.06 seconds
Beliebig Ideen, wie ich dieses Problem lösen kann? Ich verwende SAS 9.2 auf Windows 7.
Jede Hilfe wäre willkommen. Vielen Dank.
- Karthik
Ich weiß, ich kann "Daten _null_; set ds1; Datei 'c: \ test.csv' dlm = ','; put x y; run;" um das zur Arbeit zu bringen. PROC-Export scheint attraktiv, da ich morgen statt einer CSV-Datei möglicherweise in ein Excel-Arbeitsbuch exportieren muss und die Option "Datenschritt" dann nicht funktioniert. – Karthik
Ich weiß nicht, ob das funktioniert, also poste ich es als Kommentar. Können Sie einfach eine Datenansicht verwenden, um die gewünschte Untergruppe zu erstellen, und diese dann exportieren? Ich meine, können Sie eine Ansicht exportieren? Ich bin mir nicht sicher ... – itzy
Das hat wie ein Zauber funktioniert! Ich werde das als Lösung veröffentlichen. Vielen Dank. – Karthik