Macros (fáciles) de SAS. Eliminar outliers en una variable

Hace tiempo ya os propuse una chapuza para eliminar outliers de forma multivariante. Por supuesto quedabaeliminar outliers en una variable. Recortar los valores extremos en aquellas variables cuantitativas que deseemos. Para ello os propongo una macro que no considero muy compleja y que os analisisaré con mayor detalle, pero lo primero la macro al completo: %macro elimina_outliers( varib, /*VARIABLE PARA ELIMINAR EL OUTLIER*/ entrada,/*DATASET DE ENTRADA*/ salida, /*DATASET DE SALIDA, PUEDE SER EL MISMO DE ENTRADA*/ corte_inferior, /*% DE CORTE INFERIOR*/ corte_superior);/*% DE CORTE SUPERIOR*/ *******************************************************************; *CREAMOS LOS PERCENTILES; data _null_; call symput ("lim1",compress(0+&corte_inferior.)); call symput ("lim2",compress(100-&corte_superior.)); run; *PREPARAMOS MV CON LOS NOMBRES QUE OBTENDREMOS DEL PROC UNIVARIATE; data _null_; call symput ('nom_lim1',compress("P_"||tranwrd("&lim1.",'.','_'))); call symput ('nom_lim2',compress("P_"||tranwrd("&lim2.",'.','_'))); run; *EL UNIVARIATE GENERA UNA SALIDA SOLO CON LOS PERCENTILES DESEADOS; proc univariate data=&entrada. noprint; var &varib.; output out=sal pctlpre=P_ pctlpts=&lim1.,&lim2.; quit; *CREAMOS MV CON LOS CORTES DESEADOS; data _null_; set sal; call symput("inf",&nom_lim1.); call symput("sup",&nom_lim2.); run; *REALIZAMOS EL FILTRO; data &salida.; set &entrada.; if &varib.>&inf. and &varib.<&sup.; run; proc delete data=sal;run; %mend; Su ejemplo de uso correspondiente: ...

16 de mayo de 2011 · rvaquerizo

Los 10 errores y warnings más habituales en SAS

En función de los contactos con SAS support han elaborado un ranking de errores y warnings reportados a SAS con respecto al paso DATA. En este enlace tenéis el ranking, a los comentarios de Kim Wilson podéis añadir los míos. Veamos uno por uno esos errores: ERROR: AN INTERNAL ERROR HAS OCCURRED WHILE READING A COMPRESSED FILE. PLEASE CALL YOUR SAS SITE REPRESENTATIVE AND REPORT THE FOLLOWING… Tenéis que reparar el dataset como indica Kim, pero mucho ojo con mover datasets entre servidores o con trabajar con distintas versiones de SAS. ERROR: ARRAY SUBSCRIPT OUT OF RANGE AT LINE N AND COLUMN N Nos hemos ido de rango en el array sucede cuando recorremos los arrays con un bucle DO y el índice del bucle es mayor que el tamaño del array. Para evitarnos líos podemos hacer ARRAY AR(*) ; DO i = 1 TO DIM(AR); Que no se lleve nadie las manos a la cabeza. ERROR: THE FORMAT $NAME WAS NOT FOUND OR COULD NOT BE LOADED Llamamos a un formato que no existe, muy habitual en input o put. NOTE: THE MEANING OF AN IDENTIFIER AFTER A QUOTED STRING MAY CHANGE IN A FUTURE SAS RELEASE. INSERTING WHITE SPACE BETWEEN A QUOTED STRING AND THE SUCCEEDING IDENTIFIER IS RECOMMENDED. Esto no pasa… NOTE: INVALID ARGUMENT TO FUNCTION INPUT AT LINE N COLUMN N En ocasiones el formato que ponemos en input es incorrecto y se produce este error, habitual cuando trabajamos con fechas NOTE: MERGE STATEMENT HAS MORE THAN ONE DATA SET WITH REPEATS OF BY VALUES Cuando hacemos un merge si uno de los conjuntos de datos tiene observaciones duplicadas por la variable que ponemos en BY obtenemos este WARNING, cuando cruzamos tablas SAS hemos de tener mucho cuidado con las observaciones duplicadas. NOTE: SAS WENT TO A NEW LINE WHEN INPUT STATEMENT REACHED PAST THE END OF A LINE No es muy habitual este error. Tenemos que realizar lo que nos dice Kim. La opción FLOWOVER no la he empleado nunca, en este link tenéis ejemplos de esta problemática. NOTE: INVALID DATA FOR VARIABLE-NAME AT LINE N Si definimos una variable de un tipo no podemos emplear datos de otro tipo, es decir, si la variable es numérica no la igualéis a un caracter y viceversa. Tenedlo en cuenta. WARNING: THE QUOTED STRING CURRENTLY BEING PROCESSED HAS BECOME MORE THAN 262 CHARACTERS LONG. YOU MAY HAVE UNBALANCED QUOTATION MARKS. Otro problema poco habitual, seguid haciendo caso a Kim. WARNING: MULTIPLE LENGTHS WERE SPECIFIED FOR THE VARAIBLE VARIABLE-NAME BY INPUT DATA SET(S). THIS MAY CAUSE TRUNCATION OF DATA. Este warning es muy típico cuando realizamos merge con variables alfanuméricas. Imaginemos que un dataset tiene la variable póliza definida como 10. y otro tiene la variable póliza definida como12. si realizamos un merge por esa variable obtendremos este WARNING. Estos son los errores que más aparecen en SAS SUPPORT. En mi opinión hay algunos que no son habituales pero hay algunos que son dudas recurrentes que me llegan. Al final lo que siempre plantea problemas son los formatos y las fechas en SAS, el 80% de las dudas que me llegan van por ahí. Espero complementar el mensaje de SAS.

23 de abril de 2011 · rvaquerizo

Lectura de ficheros SAS7BDAT de SAS directamente con R

Un post de BIOSTATMATT que nos conduce a un código en R que nos permite leer datasets de SAS directamente con R sin necesidad de tener SAS. Un problema recurrente que abordaré con más detenimiento otro día [ahora me voy a pescar]. Aquí tenéis el enlace: http://biostatmatt.com/archives/1216 Sólo tenéis que cargar la funciónread.sas7bdat que tenéis en este enlace. Y ya podéis leer conjuntos de datos SAS. Ejemplo: ```r source("http://biostatmatt.com/R/sas7bdat.R") datos = read.sas7bdat("D:\\raul\\Trabajo\\salida\\p03.sas7bdat") De momento lo he probado en conjuntos de datos SAS sin índices y sin comprimir, si encuentro algún problema primero se lo reporto a la gente que ha creado esta función y más tarde os lo comento.

19 de abril de 2011 · rvaquerizo

Trucos SAS. Validación de consultas con PROC SQL

Hay ocasiones en las que lanzamos consultas a las BBDD con SAS y necesitamos saber si son correctas. Quería plantearos un truco SAS para PROC SQL que valida las consultas antes de ser ejecutadas. Empiezo el truco en la línea habitual, creo un dataset de ejemplo y os presento como realizar la validación, de este modo vosotros podéis copiar y pegar el código en una sesión de SAS y comprobar su funcionamiento. Datos aleatorios de partida: ...

6 de abril de 2011 · rvaquerizo

Curso de lenguaje SAS con WPS. Librerías en WPS

Sobre el trabajo con librerías en SAS se pueden escribir libros. Todas las personas que han aprendido SAS conmigo a lo largo de los años han oído el mismo duscurso. «Hay que tener mucho cuidado con las librerías en SAS. Tenemos que tener muy claro que tablas son temporales, cuales han de ser permanentes. El problema del trabajo con SAS reside en el espacio en disco». Ya son decenas las personas que ahora hacen lo que pueden con SAS que han escuchado estas palabras y que siguen llenando discos y más discos incluso de los servidores con SAS más potentes de España. ...

4 de marzo de 2011 · rvaquerizo

Macros (fáciles) de SAS. Determinar si existe una variable en un dataset

Duda que me plantearon el otro día. ¿Es posible determinar si existe una variable en un conjunto de datos SAS? Pretendían crear una macro variable que tomara el valor 1 si existía o 0 si no existía. Resolví la duda pero me guardé la macro para ponerla en el blog y así la podéis utilizar todos. De eso se trata, de compartir mis conocimientos con todos de forma altruista por ello prefiero que planteéis las dudas en el blog, no por correo. Así, entre todos, las podemos resolver. En este caso la macro es muy sencilla y tiene pocas líneas: ...

25 de febrero de 2011 · rvaquerizo

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 analístas 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: ```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