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
7 Respuestas en “Truco SAS. Crear ficheros Excel sin PROC EXPORT (II)”
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
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.
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
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.
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
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 & 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
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!