Tengo una pregunta PROC EXPORT que me pregunto si puede contestar.SAS: Limitar variables en PROC EXPORT
Tengo un conjunto de datos SAS con más de 800 variables y más de 200K observaciones y estoy tratando de exportar un subconjunto de las variables a un archivo CSV (es decir, necesito todos los registros; simplemente no quiero las más de 800 variables) . Siempre puedo crear un conjunto de datos temporal "MANTENER" solo los campos que necesito y ejecutar la EXPORTACIÓN en ese conjunto de datos temporales, pero estoy tratando de evitar el paso adicional porque tengo una gran cantidad de registros.
Para demostrar esto, considere un conjunto de datos que tenga tres variables llamadas x, y y z. Pero, quiero que el archivo de texto generado a través de PROC EXPORT contenga solamente x e y. Mi intento de una solución a continuación no funciona del todo.
El Código SAS
Cuando ejecuto el siguiente código, que no entiendo exactamente lo que necesito. Si ejecuta este código y mira el archivo de texto que se generó, tiene una coma al final de cada línea y el encabezado incluye todas las variables en el conjunto de datos de todos modos. Además, recibo algunos mensajes en el registro que no debería recibir.
Estas son las primeras líneas del archivo de texto que se ha generado ("C: \ test.csv")
x,y,z
1,1,
2,4,
3,9,
4,16,
El Registro de SAS
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
Cualquier ideas de cómo puedo resolver este problema? Estoy ejecutando SAS 9.2 en Windows 7.
Cualquier ayuda sería apreciada. Gracias.
- Karthik
Me doy cuenta de que puedo usar "data _null_; set ds1; file 'c: \ test.csv' dlm = ','; put x y; run;" para hacer que esto funcione La exportación de PROC parece atractiva porque es posible que necesite exportar a un libro de trabajo de Excel mañana en lugar de un archivo CSV y la opción "paso de datos" no funcionará en ese momento. – Karthik
No sé si esto funciona, entonces lo estoy publicando como comentario. ¿Puedes usar una vista de datos para crear el subconjunto que deseas y luego exportarlo? Quiero decir, ¿puedes exportar una vista? No estoy seguro ... – itzy
¡Eso funcionó como un encanto! Voy a publicar eso como la solución. Gracias. – Karthik