Truco SAS. Crear ficheros Excel sin PROC EXPORT (II)

Abril 7th, 2008 | por rvaquerizo |

Con anterioridad hemos visto el manejo del ODS y como nos sirve para generar archivos HTML que podemos usar con Excel sin necesidad de emplear el PROC EXPORT. Pero el lenguaje SAS empleado era complicado y requería muchas líneas de código. Pues esto podemos evitarlo si creamos nuestra propia macro para exportar nuestras tablas SAS a tablas Excel.

"Simplemente" hemos de parametrizar el código que vimos en la primera parte del truco SAS. Pero realizaremos diversas modificaciones para que nuestro código sea más práctico:

%macro excel(ubicacion,dataset);option missing=""; 
 
title; 
 
/*ELIMINAMOS LA LIBRERIA SAS DEL NOMBRE*/ 
 
 %let aux1=%scan("&dataset.",2,"."); 
 
/*LAS VARIABLES NUMERICAS IRAN CON FORMATO EUROPEO*/ 
 
 proc contents data=&dataset. 
 
 			  out=_temporal_ (where=(type=1) keep=name type) noprint ; 
 
 run; 
 
/*CREAMOS UNA INSTRUCCION PARA DAR EL FORMATO EUROPEO*/ 
 
 proc sql noprint; 
 
 	select "format "||compress(name)||" commax12.6" into:_instruccion separated by "; " 
 
 	from _temporal_; 
 
 quit; 
 
proc delete data=_temporal_; run; 
 
/*EMPLEAMOS EL PROC PRINT JUNTO CON ODS*/ 
 
 filename _temp_ "&ubicacion.\&aux1..xls"; 
 
title ; 
 
 ods noresults; 
 
 ods listing close; 
 
 ods html file=_temp_ rs=none style=minimal; 
 
 	proc print data=&dataset. noobs; 
 
 	&_instruccion.; 
 
 	run; 
 
 ods html close; 
 
 ods results; 
 
 ods listing; 
 
option missing="."; 
 
%mend excel;

Con esta macro ya disponemos de una función que nos exporta nuestras tablas SAS a Excel. Por ejemplo:

 
data uno;
 do i=1 to 100;
  j=ranpoi(23,3);
  k=ranpoi(123,3);
  l=ranpoi(2,3);
  m=ranpoi(3,3);
  n=l/j;
  uno="hola";
  y=ranuni(89)*100;
 output;
 end;
run;
%excel(C:\,work.uno);
 

Interesante macro la que os planteo, puede sernos de gran utilidad a la hora de realizar validaciones de ficheros, tabular información, análisis exploratorios,... La interactuación entre SAS y Office nos facilitará nuestro trabajo.

Si tenéis más dudas o sugerencias... rvaquerizo@analisisydecision.es

  1. 7 Respuestas en “Truco SAS. Crear ficheros Excel sin PROC EXPORT (II)”

  2. Por LILIANA, Mar 13, 2009 | Responder

    Como puedo generar una frecuencia de valores perdidos para cada tabla de una librería ya creada, además reemplazar los missing en 0 cuando la variable es numérica y ñ cuando la variable es de carácter

  3. Por rvaquerizo, Mar 16, 2009 | Responder

    He hecho un truco que resuelve tu duda:

    http://analisisydecision.es/trucos-sas-informes-de-valores-missing/

    Para transformaciones de variables tienes:

    http://analisisydecision.es/macros-sas-hacer-0-los-valores-missing-de-un-dataset/

    http://analisisydecision.es/truco-sas-transformaciones-de-variables-con-arrays/

    Estos trucos te servirán para modificar los valores de tus dataset de forma más automática.

  4. Por Marta, Oct 21, 2009 | Responder

    Hola.
    Necesitaría saber cómo puedo hacer para que cada categoría (de productos, por ejemplo) que tengo en mi fichero SAS, se exporte a UNA HOJA DIFERENTE de un mismo fichero Excel.
    Gracias

  5. Por rvaquerizo, Oct 21, 2009 | Responder

    Hola,

    Emplea esta macro para generar N excel en función de la variable categórica. Después tienes http://analisisydecision.es/truco-sas-unir-todos-los-excel-en-uno-solo/ este truco SAS que te une todos los excel en uno.

    Saludos.

  6. Por VICTOR, Jun 25, 2010 | Responder

    PROBE LA MACRO Y ME DICE QUE NO ENCUENTRA EL ARCHIVO AMP.
    NO HE PODIDO RESOLVERLO,

    SI ME PUEDEN AYUDAR SE LOS AGRADECERIA

  7. Por Dani Fernández, Jun 26, 2010 | Responder

    Hola Victor, con ánimo de ayudar me he mirado la macro, la macro es correcta solo que Raul habría escrito este código en algun editor que a la hora de pegarlo se desvirtuó el “&”, es decir, todo lo que diga “&” significa realmente “&” (el &amp significa el ‘ampersand’, y NO es que Raul se olvidara de definir la macro variable ‘amp’).

    El código correcto sería:

    %macro excel(ubicacion,dataset);
    option missing=”";
    title;
    /*ELIMINAMOS LA LIBRERIA SAS DEL NOMBRE*/
    %let aux1=%scan(”&dataset.”,2,”.”);
    /*LAS VARIABLES NUMERICAS IRAN CON FORMATO EUROPEO*/
    proc contents data=&dataset.
    out=_temporal_ (where=(type=1) keep=name type) noprint ;
    run;
    /*CREAMOS UNA INSTRUCCION PARA DAR EL FORMATO EUROPEO*/
    proc sql noprint;
    select “format “||compress(name)||” commax12.6″ into:_instruccion separated by “;”
    from _temporal_;
    quit;
    proc delete data=_temporal_; run;
    /*EMPLEAMOS EL PROC PRINT JUNTO CON ODS*/
    filename _temp_ “&ubicacion.\&aux1..xls”;
    title ;
    ods noresults;
    ods listing close;
    ods html file=_temp_ rs=none style=minimal;
    proc print data=&dataset. noobs;
    &_instruccion.;
    run;
    ods html close;
    ods results;
    ods listing;
    option missing=”.”;
    %mend excel;

    %excel(C:\,work.uno);

    Un saludo,
    Dani Fernandez

  8. Por Dani Fernández, Jun 26, 2010 | Responder

    Travesuras de los editores:
    cuando dije “es decir, todo lo que diga “&” significa realmente “&” ” realmente el primer “&” significaba otra cosa que separo ahora por ‘/’:
    Quise decir:
    todo lo que diga ‘&/a/m/p/;’ significa realmente ‘&’.

    Esto es como explicar a un chino como escribir la ‘ñ’ de España escribiendo en un teclado ruso, que complicado!!!!

    jaja!

Publica un Comentario