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
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
He hecho un truco que resuelve tu duda:
https://analisisydecision.es/trucos-sas-informes-de-valores-missing/
Para transformaciones de variables tienes:
https://analisisydecision.es/macros-sas-hacer-0-los-valores-missing-de-un-dataset/
https://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.
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
Hola,
Emplea esta macro para generar N excel en función de la variable categórica. Después tienes https://analisisydecision.es/truco-sas-unir-todos-los-excel-en-uno-solo/ este truco SAS que te une todos los excel en uno.
Saludos.
PROBE LA MACRO Y ME DICE QUE NO ENCUENTRA EL ARCHIVO AMP.
NO HE PODIDO RESOLVERLO,
SI ME PUEDEN AYUDAR SE LOS AGRADECERIA
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
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!
Hola.
Me gustaría, con código, poder importar datos desde un fichero Excel ubicado en una determinada uinidad de red. Estos datos están en una fila y columna determinada, y el encabezado no coincide con el nombre de las variables.
Un saludo,
Noemí
Noemi lo más fácil es con una sentencia libname, suponiendo que a los datos en Excel le hayas puesto un nombre.
libname libro ‘c:\datos.xls’ header=yes;
data sasuser.borrar;
set libro.rango;
run;
libname libro clear;
En el código anterior se crea una librería llamada libro, esto hace que SAS considere el libro de Excel como si fuera una base de datos y cada una de las hojas como si fuera una tabla.
rango es el nombre que yo le he puesto al rango de Excel que contiene los datos. Se crea una conjunto de datos en la librería sasuser y por último se desasigna la librería. En lo que respecta a los nombres de las variables SAS tomará los encabezados como nombre de las variables, haciendo los cambios necesarios para que se adapten a la sintaxis de nombres de variables de SAS. Pero una vez en SAS les puedes cambiar fácilmente los nombres por código.
Espero que te sirva de ayuda. Saludos.
Hola, manual al respecto.
http://www.sas.com/offices/NA/canada/downloads/presentations/GHSUG2009/excel.pdf
http://www.scsug.org/SCSUGProceedings/2007/papers/how/HOW-Cranford.pdf
No sé si habrá algún problema con excel 2007. Desde luego no te recomiendo DDE.
Hola, más recursos sobre libname de Excel.
http://www2.sas.com/proceedings/sugi31/024-31.pdf
http://www2.sas.com/proceedings/forum2007/119-2007.pdf
http://support.sas.com/kb/32/455.html
Hola,
Me gustaria saber como cambiar el nombre de los atributos en sas.
Gracias
¿Podrías ser más concreto con la pregunta?
No entiendo muy bien a que te refieres.
Hola nuevamenete, como realizar una exportacion sin cabecera, es decir, utilizando el proc export existe alguna funcion que pueda utilizar para exportar sin los campos de la tabla?
muchas gracias y un saludo
Hola, creo que sería con
PUTNAMES=NO;
Hola, mira a ver si te sirve
proc export data=data_to_export outfile=’C:\datos.csv’ dbms=csv replace;
PUTNAMES=NO;
run;
Hola!
Quiero exportar los datos de una tabla SAS a un Excel ya existente, en una pestaña concreta y en un lugar concreto de la pestaña. He probado creando referencias en Excel, y consigo que se me exporten los datos donde quiero, pero me borra el resto de la información que existe en la pestaña.
¿Algún código que me pueda servir de guía?
Gracias!!
Hola!
Estamos intentando establecer una conexion desde excel a una tabla sas, pero no veo más que las librerias por defecto.
¿Como puedo hacer un libname en excel para que me deje elegir una tabla sas de esa libreria?
gracias!
Buenas,
Necesito ayuda con lo siguiente…
Tengo que exportar una tabla de SAS como txt , pero necesito que los campos que contienen cadenas de texto, estas se exporten entre comillas dobles. Ya que el programa donde voy a cargar el txt, lo necesita así para cargarlo correctamente.
He estado buscando información, pero no doy con ello. Así que de momento lo que hago es exportarlo y luego importar y volver a exportar desde un access, ya que hay sí que me importa el txt con comillas en los strings.
Muchas gracias.