Luego de un largo y merecido receso vuelvo con algunos tips que espero les facilite su día a día con SAS.En esta ocasión les voy a hablar sobre archivos XML y como SAS puede interactuar con ellos.
No pretendo dictar una cátedra sobre XML, para aquellos que quieran saber más sobre ellos pueden encontrarar en internet toda la información que necesitan y NO necesitan sobre este tema
Segun Wikipedia XML, siglas en inglés de Extensible Markup Language (lenguaje de marcas extensible) es hoy en dia el medio mas popular para intercambio de data. XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades. Algunos de estos lenguajes que usan XML para su definición son XHTML, SVG, MathML.
XML no ha nacido sólo para su aplicación en Internet, sino que se propone como un estándar para el intercambio de información estructurada entre diferentes plataformas. Se puede usar en bases de datos, editores de texto,hojas de cálculo, etc.
SAS ha provisto distinto metodos de lectura/escritura de archivos XML desde la version 8.2. Vamos a darle un vistazo a los mas populares:
-Libname XML
SAS posee su propio para motor lectura/escritura para XML. La gran diferencia entre este tipo de libreria y las demás (Base, Oracle, ODBC, etc) es que a punta a un solo archivo XML, es decir, cada archivo XML que desees crear debe tener asociado un Libname XML distinto (puedes usar el mismo Libname si deseas reemplazar el archivo).
Para que todos (los lectores de este post y mi persona) utilizemos el mismo archivo XML, vamos a empezar por crear uno y posteriormente vamos a leerlo desde SAS. Para nuestros ejemplos vamos a usar SASHELP.Class
Paso a Paso:
*1) Definimos nuestra liberia XML
- El nombre de la liberia es: xmlout
- Definimos el motor de la liberia que es: xml- El archivo a ser creado es class.xml en el directorio C:\ ;
Libname xmlout xml ‘C:\class.xml’;
*2) Simplemente usamos un Paso de Datos para crear nuestro primer XML. No pensaste que fuera tan fácil!!!;
data xmlout.class;
set sashelp.class;run;
Ahora hagamos doble click en nuestro recién creado archivo y podrán notar que es muy similar a HTML. Como les comente anteriormente, no voy a ir en detalle sobre la estructura del archivo, esa info la encuentran facilmente en la super autopista de la información.
Ahora vamos a leer nuestro archivo nuevamente en SAS. Me imagino que ya tienen idea de como es el proceso. En este particular podemos hacerlo de 2 maneras, ya que solo vamos a leer el archivo podemos utilizar el libname anterior o creamos uno nuevo.
data MyXMLClass;set xmlout.class;
run;
otra forma
Libname xmlin xml ‘C:\class.xml’;
data MyXMLClass;
set xmlin.class;
run;
Para determinar que hemos leído el archivo correctamente podemos usar el siguiente código:
proc print data=MyXMLClass;
run;
proc contents data=MyXMLClass;
run;
-ODSOtra manera de crear archivos XML sin necesidad de usar librerías es usando ODS. Abajo un ejemplo bastante sencillo
ods xml file=’C:\odsclass.xml’;
Data myxml;
set sashelp.class;
run;
ods xml close;
Al abrir este archivo podrán notar que el cuerpo del archivo es mas complejo,la estructura es jerárquica, posee información relacionada con el proc print y otra serie de datos que hacen que estan opción sea poco apropiada. Como ejercicio intente leer el archivo odsclass.xml usando una librería XML. Vieron los resultados?
Nota: si de verdad le quieren hacer la vida imposible a alguien que necesite leer un XML generado por ustedes, entonces utilicen la opcion del ODS, de lo contrario nunca la utilizen.
-XML mapper: Leyendo complejos archivos de XML.
En la vida real no siempre nos topamos con archivos rectangulares (del tipo usado para crear tablas) sino que a menudo nos encontramos con archivos que poseen estructuras con jerarquías muy complejas y debemos idearnos una forma de extraer la data que realmente necesitamos.
A partir de la versión 9.1, SAS provee una herramienta llamada XML mapper que nos ayuda a seleccionar sólo la data que necesitamos del el archivo XML. Para los que poseen SAS 9.1 o superior Si hacen click en Inicio -> Programas -> SAS deberían poder encontrar el SAS XML Mapper. Para la 8.2 creo que hay la opción de descargalo de SAS support.
El XML mapper los ayudara a crear un mapa del archivo con la data que necesitan, seguidamente deberan salvar dicho mapa en algun directorio para poder ser invocado desde SAS asi como sigue:

filename class ‘C:\class.xml’;
filename SXLEMAP ‘.map’;
libname MyClass xml xmlmap=SXLEMAP access=READONLY;
SASludos,
Alberto