El debate político o como analizar textos con WPS

¿Qué hacen los políticos españoles en el Congreso de los Diputados? Las tertulias radiofónicas están llenas de analistas políticos que podrán opinar sobre la labor del Congreso mejor que yo. Sin embargo, yo tengo WPS, sé programar en SAS y en la web del Congreso están todas las sesiones y todas las intervenciones de la democracia. Pues con estos elementos vamos a iniciar un proceso de text mining, aunque no llegaremos a realizar ningún análisis complejo. Para comenzar, como siempre, necesito datos. Me he guardado la sesión del Congreso de los Diputados del día 26/01/2011 como web y posteriormente con Word la he salvado como fichero de texto (ojo con las codificaciones). De todos modos, podéis descargaros aquí el fichero. ...

4 de febrero de 2011 · rvaquerizo

Trucos SAS. Borrando blancos innecesarios con COMPBL

Me ha llegado hoy una duda interesante. El problema era eliminar espacios en blanco innecesarios mediante alguna función de SAS. Más concretamente, teníamos algo parecido a: data prueba; nombre = "DE PEDRO MARTINEZ ESTEBAN JOSE"; /* QUEREMOS LLEGAR A: DE PEDRO MARTINEZ ESTEBAN JOSE */ run; Pues bien, esto se puede hacer con la función COMPBL, que removes multiple blank spaces with SAS: data prueba; nombre = "DE PEDRO MARTINEZ ESTEBAN JOSE"; nombre2 = compbl(nombre); put nombre2; run; Una función fácil y práctica que seguro conocéis, pero que no está mal recordar. Saludos.

1 de febrero de 2011 · rvaquerizo

Curso de lenguaje SAS con WPS. Funciones en WPS

A la hora de trabajar con variables en WPS, uno de los elementos fundamentales son las funciones. En WPS son completamente análogas a SAS. Además, este capítulo quiero que nos sirva para familiarizarnos un poco más con el interfaz de WPS y con sus elementos. Vamos a crear un script, un programa SAS, dentro de nuestro proyecto. Nos ubicamos en el Project Explorer, pulsamos el botón derecho y seleccionamos New — Other; en la ventana que nos sale, nos vamos a WPS y generamos un nuevo programa (script) al que damos el nombre de “funciones”: ...

15 de enero de 2011 · rvaquerizo

Agregador de noticias de SAS

Tall Galili administrador de R-bloggers ha creado un agregador de noticias de SAS. Ya estás tardando en suscribirte. Por cierto, un título increíble: An online (unofficial) SAS® journal – written by bloggers tratándose de SAS la palabra unofficial tenía que aparecer. Por cierto, R-bloggers también agrega blogs en español y otras lenguas.

9 de diciembre de 2010 · rvaquerizo

Abreviar código en Enterprise Guide

En Enterprise Guide de SAS podemos ahorrarnos código empleando las abreviaturas del editor. Yo no lo recomiendo porque nuestros códigos sólo podrán ser ejecutados con nuestros equipos, pero Guide es una herramienta pensada para los usuarios y no para el desarrollo de código. Sobre un programa de Guide pulsamos sobre Programas -> Añadir abreviaturas y aparece la siguiente ventana: En la ilustración que os pongo hemos creado la abreviatura ps que equivale a proc sql. Con ello, cada vez que en el editor de programas de Guide pongamos ps veremos lo siguiente: ...

11 de noviembre de 2010 · rvaquerizo

Trucos SAS. Ejecutar un código si existe una tabla o un fichero

Esta duda me llegó hace unos días. Se trataba de ejecutar un código si existía determinado fichero o determinada tabla. Para hacer esto, os planteo una posible metodología que yo utilizaba cuando programaba SAS en una gran entidad bancaria con Enterprise Guide 1; por aquel entonces hacía maravillas con la “castaña” del Guide v1. Entre ellas, unas macros que contenían una sentencia condicional que ejecutaba un código en función de la función (bonita expresión) EXIST o FILEEXIST. Lo que yo hacía era algo parecido a esto: ...

10 de noviembre de 2010 · rvaquerizo

Trucos SAS. Mejor que hash IN para cruzar tablas

El otro día Fernando comentó que los cruces de tablas más rápidos entre tablas grandes y tablas pequeñas son las sentencias condicionales sobre listas. Tiene razón. Es una práctica muy habitual en SAS cuando leemos tablas de Oracle la realización de listas; ésto derivará en otro truco SAS en breves días. El caso es que me gustaría que probarais este código: * CONJUNTO DE DATOS GRANDE; data grande; do i = 1 to 20000000; idcliente = int(ranuni(0) * 1000000); output; end; drop i; run; * CONJUNTO DE DATOS PEQUEÑO, SIN DUPLICADOS; data pequenio; do i = 1 to 2000000; idcliente = int(ranuni(34) * 1000000); if mod(idcliente, 1132) = 0 then output; end; drop i; run; proc sort data=pequenio nodupkey; by idcliente; run; * CREAMOS LA LISTA EN UNA MACROVARIABLE; proc sql noprint; select idcliente into :lista separated by " " from pequenio; quit; * CRUCE MEDIANTE SENTENCIA IN; data machea5; set grande; if idcliente in (&lista.); run; Bueno, el tiempo de ejecución de este cruce de tablas es de unos pocos segundos. Mejora a las soluciones planteadas el otro día y, sobre todo, es un código fácil, muy fácil. Se trata de crear listas de macrovariables y realizar un paso DATA con una sentencia condicional. ...

6 de septiembre de 2010 · rvaquerizo

David gana a Goliat. La sentencia del caso SAS frente a WPS

Estaba esperando que saliera la sentencia. Además cabía la posibilidad de pertenecer a Goliat y tenía la boca cerrada. Y resulta que tenemos una de las sentencias más interesantes en cuanto a software se refiere: http://www.bailii.org/ew/cases/EWHC/Ch/2010/1829.html Yo no soy capaz de leerme eso en inglés, pero el traductor de Google me ha ayudado: Por las razones anteriormente expuestas, llego a la conclusión de la siguiente manera: i) Si bien no estoy convencido de que Pumfrey J se equivocó al concluir en Navitaire que, sobre la correcta interpretación del artículo 1 (2) de la Directiva sobre el software, los derechos de autor en los programas de ordenador no protegen a los lenguajes de programación de la copia, estoy de acuerdo con él en que se trata de una cuestión sobre la que se requiere la orientación del Tribunal de Justicia (véanse los párrafos 211-218 supra). ...

30 de julio de 2010 · rvaquerizo

Laboratorio de código SAS. Vistas + PROC MEANS vs. PROC SQL

Las vistas son muy importantes cuando trabajamos con SAS. El problema del espacio in disco se acentúa cuando trabajamos con SAS; este problema podemos minimizarlo empleando vistas. También hay otras situaciones en las que se recomienda usar vistas: cuando realizamos agregaciones sobre campos de una tabla y, a la vez, realizamos una operación sobre estos campos, es muy habitual emplear el PROC SQL. Ejemplo de lo que cuento: data importes; do idcliente = 1 to 2000000; importe = ranuni(34) * 1000; output; end; run; * FORMA 1: SQL; proc sql; select var(sqrt(importe)), var(importe) from importes; quit; Sobre una tabla con 2.000.000 de registros, hacemos la varianza de un campo importe y de la raíz cuadrada de ese mismo campo importe. Es decir, hacemos la varianza sobre la operación aritmética de un campo. Para hacer este trabajo con PROC MEANS sin tener que crear un nuevo campo en la tabla, haríamos una vista y un MEANS posteriormente: ...

19 de julio de 2010 · rvaquerizo

Monográfico. Funciones INTNX e INTCK para fechas en SAS

Las funciones INTNX e INTCK de SAS atraen muchas visitas a esta web. Aunque ya hay algún mensaje en el que muestro cómo funcionan, creo que algunos trabajadores me agradecerán este monográfico. INTNX e INTCK son funciones para trabajar con fechas en SAS. INTNX sirve para trabajar con periodos, por lo que el resultado que ofrece será una fecha; e INTCK sirve para trabajar con intervalos, por lo que el resultado que nos ofrece será un número entero. Ésta es la premisa fundamental. Entonces: ...

6 de julio de 2010 · rvaquerizo