Máximo por registro de una serie de variables carácter en SAS

Un lector del blog preguntaba cómo obtener el valor máximo dentro de un registro, por fila, de una sucesión de variables carácter; evidentemente la función max no servía porque es específica para variables numéricas. La duda la planteaba del siguiente modo: Pero tengo una duda que no soy capaz de sacar y no veo ninguna cosa parecida para poder sacarlo, a ver si me puedes ayudar, o si no, pues me dices que no y no hay ningún problema. ...

24 de febrero de 2017 · rvaquerizo

Trucos SAS. Lista de variables missing

Duda que me plantearon ayer por la tarde: dada una serie de variables, determinar qué registro tiene todas esas variables nulas. El truco que planteo puede servir para determinar incluso cuántos valores perdidos tiene esa lista de variables; ese truco me lo reservo para otro día. El código lo acompaño con un ejemplo para que se pueda ejecutar y analizar su funcionamiento: /* GENERAMOS DATOS ALEATORIOS CON MISSING */ data aleatorio; do i = 1 to 20000; aleat1 = sqrt(rannor(45)); aleat2 = sqrt(rannor(5)); aleat3 = sqrt(rannor(4)); aleat4 = sqrt(rannor(450)); aleat5 = sqrt(rannor(40)); output; end; run; /* IDENTIFICAMOS FILAS COMPLETAMENTE NULAS */ data fila_nula; set aleatorio; nulo = 0; array varib(*) aleat1--aleat5; do j = 1 to dim(varib); if not missing(varib(j)) then nulo = 1; end; drop j; if nulo = 0; run; Muy sencillo el truco. Si se encuentra alguna variable que no es nula, la variable nulo ya no toma el valor 0. Espero que os sea de utilidad. Saludos.

8 de marzo de 2013 · rvaquerizo

Trucos SAS. Primer y último elemento de un array

Breve entrada sobre el uso de array en SAS. Dada una tabla SAS como ésta con una variable mes1, mes2… mesN: Necesitamos identificar el primer y el último elemento no nulo de un array y el número de elementos no nulos de ese array. Veamos el ejemplo: data datos; input id mes1 mes2 mes3 mes4 mes5 mes6; datalines; 1 . . . . . . 2 162.18 88.41 919.62 891.25 837.73 163.14 3 . 790.52 160.03 . 60.31 343.30 4 . . 482.45 755.39 . . 5 265.17 963.53 . . 392.06 . 6 . 214.95 616.17 183.01 778.48 57.42 7 191.52 . 208.50 50.55 705.72 . 8 711.76 . . . 193.20 658.45 9 782.67 172.49 539.42 663.28 4.53 358.51 10 695.12 367.74 . 573.47 366.30 951.98 ; run; Para este proceso creamos un array que recorreremos dos veces: una hacia adelante para identificar el primer elemento y otra hacia atrás para identificar el último elemento: ...

21 de mayo de 2012 · rvaquerizo

Trucos SAS. Operaciones con tablas de dimensiones con SAS

Algunos llaman a las tablas de dimensiones tablas de lookup; yo me niego. Con SAS ya hemos visto cómo crear cruces de tablas de dimensiones con tablas de hechos a través de formatos; bajo mi punto de vista, el método más eficiente. Pero hoy quería traeros un ejemplo de cruce de tabla pequeña con tabla grande a través de array multidimensionales con SAS. Se trata de guardar los valores de la tabla pequeña en un array temporal multidimensional cuando leemos la tabla grande. Para ilustrar esta tarea, he preparado un ejemplo: ...

25 de octubre de 2011 · rvaquerizo