Ho una domanda PROC EXPORT che mi chiedo se è possibile rispondere.SAS: variabili di limitazione in PROC EXPORT
Ho un set di dati SAS con oltre 800 variabili e oltre 200K di osservazioni e sto tentando di esportare un sottoinsieme delle variabili in un file CSV (cioè ho bisogno di tutti i record, io non voglio tutte le 800+ variabili) . Posso sempre creare un set di dati temporaneo "TENERE" solo i campi di cui ho bisogno ed eseguire EXPORT su quel set di dati temporaneo, ma sto cercando di evitare il passaggio aggiuntivo perché ho un gran numero di record.
Per dimostrarlo, prendere in considerazione un set di dati con tre variabili denominate x, y e z. Ma voglio che il file di testo generato attraverso PROC EXPORT contenga solo x e y. Il mio tentativo di una soluzione qui sotto non funziona del tutto.
Il Codice SAS
Quando eseguo il seguente codice, non ottengo esattamente quello che mi serve. Se si esegue questo codice e si guarda il file di testo che è stato generato, ha una virgola alla fine di ogni riga e l'intestazione include comunque tutte le variabili nel set di dati. Inoltre, ottengo alcuni messaggi nel registro che non dovrei ottenere.
Ecco le prime righe del file di testo che è stato generato ("C: \ test.csv")
x,y,z
1,1,
2,4,
3,9,
4,16,
Il 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
Qualsiasi idee su come posso risolvere questo problema? Sto eseguendo SAS 9.2 su Windows 7.
Qualsiasi aiuto sarebbe apprezzato. Grazie.
- Karthik
Mi rendo conto che posso utilizzare "data _null_; imposta ds1; file 'c: \ test.csv' dlm = ','; metti x y; run;" per farlo funzionare. PROC Export sembra interessante perché potrebbe essere necessario esportare domani in una cartella di lavoro Excel anziché in un file CSV e l'opzione "passaggio dati" non funzionerà. – Karthik
Non so se questo funziona, quindi lo sto postando come commento. Puoi semplicemente utilizzare una visualizzazione dati per creare il sottoinsieme che desideri e quindi esportarlo? Voglio dire, puoi esportare una vista? Non sono sicuro ... – itzy
Ha funzionato come un incantesimo! Lo posterò come soluzione. Grazie. – Karthik