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: ```sas 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 “ remove blank spaces with SAS ”: ```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 los elementos de WPS. Vamos a crear un script , un programa SAS, dentro de nuestro proyecto. Nos ubicamos en el Proyect Explorer pulsamos el botón derecho y 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 increible: 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 recomiento 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:El editor entiene que estamos escribiendo proc sql y pulsando el TAB podemos ahorrarnos escribir mucho mucho código.

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 aquellos 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 cruce 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 ralización de listas, esto derivará en otro truco SAS en breves días. El caso es que me gustaría que probárais este código: data grande; do i=1 to 20000000; idcliente=int(ranuni(0)*1000000); drop i; output; end; run; *CONJUNTO DE DATOS PEQUEÑO, NO TIENE REGISTROS DUPLICADOS; data pequenio; do i=1 to 2000000; idcliente=int(ranuni(34)*1000000); drop i; if mod(idcliente,1132)=0 then output; end; run; proc sort data=pequenio nodupkey; by idcliente;quit; *; proc sql noprint; select idcliente into:lista separated by " " from pequenio ; quit; *; data machea5; set grande; if idcliente in (&lista.); run; Bueno, el tiempo de ejecución de este cruce de tablas es de 3 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. Tiene un problema, el tamaño máximo que nos permite una macrovariable. Y en este punto continúa el truco SAS. ¿Cuál es el tamaño máximo que puede tener una macrovariable? 64K, 65534 characters. Tenemos que evitar a toda costa este error: ERROR: The length of the value of the macro variable LISTA (70356) exceeds the maximum length (65534). The value has been truncated to 65534 characters. Para evitar este problema podemos realizar el siguiente planteamiento: 65.000/la longitud del campo de cruce, en el caso del ejemplo: 65.000/8 = 8.000 más o menos. Hacemos una prueba: ...

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, derechos de autor en los programas de ordenador no protege a los lenguajes de programación de la copia, estoy de acuerdo con él que se trata de una cuestión sobre la que se requiere la orientación de la 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 en 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 raiz 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 como 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 luego el resultado que ofrece será una fecha e INTCK sirve para trabajar con intervalos, luego el resultado que nos ofrece será un número entero. Esta es la premisa fundamental. Entonces: ...

6 de julio de 2010 · rvaquerizo

Gráficos de densidades con SAS y el PROC KDE

El PROC KDE de SAS está incluido en el módulo SAS/STAT. Es un procedimiento que nos permite estudiar gráficamente las distribuciones de variables continuas. Lo que nos produce son gráficos de densidades. Para seguir el ejemplo nos vamos a ir a Yahoo Finance y descargarnos un evolutivo del IBEX de los últimos 3 meses (yo realizo este proceso con Excel), una vez tengamos el dataset creado, para el análisis de la densidad univariante podemos hacer: ...

29 de junio de 2010 · rvaquerizo