Truco Excel. Dividir una variable cuantitativa en tramos

Un truco Excel que implica la utilización de la función JERARQUIA para la creación de un ranking y que la complementamos con la tramificación de ese ranking; de este modo creamos tramos de una variable numérica con Excel sin necesidad de ordenación previa. La situación sería: Tenemos un campo cuantitativo que deseamos tramificar. El primer paso es la fórmula JERARQUIA: =JERARQUIA(A1;$A$1:$A$30;1) Creamos un valor numérico que va desde el 1 hasta el 30 en función de la posición que ocupa; el último elemento de la función nos indica si es descendente (0) o si es ascendente (1). Ahora tenemos que dividir esos 30 valores en 4 grupos (por ejemplo); para ello hacemos una fórmula ya conocida para los lectores de esta bitácora: ...

20 de noviembre de 2012 · rvaquerizo

Parámetro asociado a una Poisson con SAS

Mirad que he visto datos en mi vida. Y esos datos siguen muchas distribuciones. Y una de las distribuciones más habituales con las que me he encontrado es la distribución de Poisson. Esta distribución tiene una característica muy interesante: la varianza es igual que la media. Y si la varianza no es igual a la media tenemos distribuciones de Poisson sobredispersa o Poisson infradispersa con propiedades muy interesantes y que se emplea mucho en el ámbito actuarial, aunque tendremos eventos con una distribución de Poisson cuando estamos hablando de eventos independientes en intervalos de tiempo. ...

15 de noviembre de 2012 · rvaquerizo

Trucos Excel. Pasar de carácter a numérico con fórmulas

Nos pasan un fichero de texto y tenemos números con separación decimal americana y Excel, ¡horror! En este blog se pasaron soluciones a este problema, pero hoy vamos a emplear una solución muy sencilla mediante fórmulas. Nada complicado: se trata de enlazar las funciones SUSTITUIR y VALOR: =VALOR(SUSTITUIR(A1; "."; ",")) Así de sencillo. Espero que os sea de utilidad. Saludos.

31 de octubre de 2012 · rvaquerizo

Nuevo curso de estadística con R

De nuevo Juanjo Gibaja y Carlos Gil ponen en marcha un nuevo curso de estadística con R. Gratuito y abierto a todo aquel que desee inscribirse. En la web de Carlos podéis encontrar más información acerca de este nuevo curso. El nombre ahora es Introducción a la Estadística Moderna con R. Viendo cómo funcionó el anterior curso, el éxito está garantizado; y en este caso, la temática es más interesante si cabe, por lo que le auguro aún mayor éxito. ...

23 de octubre de 2012 · rvaquerizo

La macro iterlist para automatizar código SAS

Impresionante macro de SAS que nos puede ahorrar picar mucho mucho código. La macro se llama iterlist y la he encontrado en este enlace. Es código SAS muy avanzado: %macro iterlist(code =, list =); %*** ASIGNAMOS CADA ELEMENTO DE LA LISTA A UNA MACROVARIABLE INDEXADA &&ITEM&I ; %let i = 1; %do %while (%cmpres(%scan(&list., &i.)) ne ); %let item&i. = %cmpres(%scan(&list., &i.)); %let i = %eval(&i. + 1); %end; %*** GUARDAMOS EL CONTEO TOTAL ; %let cntitem = %eval(&i. - 1); %*** REEMPLAZAMOS EL TOKEN ? CON LOS ELEMENTOS DE LA LISTA ; %do i = 1 %to &cntitem.; %let codeprp = %qsysfunc(tranwrd(&code., ?, %nrstr(&&item&i..))); %unquote(&codeprp.) %end; %mend iterlist; El funcionamiento es muy complejo; destacaría el uso de %qsysfunc. El caso es que nos permite pasar listas de código. Imaginemos que tenemos que hacer la siguiente tarea: ...

17 de octubre de 2012 · rvaquerizo

Macros SAS. Pasar de texto a numérico

“Pasar de texto a número en SAS”. Una de las búsquedas que más recibe esta web. Ya hay monográficos, trucos, artículos,… al respecto. Pero faltaba una macro que espero os ayude. Es una macro muy básica pero que permite pasar textos con números en formato europeo o en formato americano. La macro: %macro texto_numero(varib_ini=, varib_fin=,europeo=0); vaux=&varib_ini.; drop vaux; %if &europeo. %then %do; vaux = compress(vaux,"."); %end; %if &europeo. %then %do; vaux = tranwrd(vaux,",","."); %end; &varib_fin. = input(vaux * 1,best12.); %mend; Breve descripción. La variable inicial (varib_ini) será la cadena de texto que deseamos pasar a número. La variable final (varib_fin) será el nombre de la variable numérica. Si deseamos conservar el nombre tenemos que jugar con rename como opción de lectura o escritura del paso data. Estoy estudiando otra macro más avanzada para realizar este trabajo. El parámetro europeo=0 es el que nos indica si el número que transformamos tiene formato europeo o no. La macro necesita una variable auxiliar (vaux) para realizar las transformaciones necesarias en el caso de ser un número en formato europeo. Una vez está el número en formato americano realizamos la transformación sobre la variable final con input, el formato que ponemos es best12.. ...

10 de octubre de 2012 · rvaquerizo

Trucos Excel. Unir todos los Excel en uno, versión muy mejorada

El amigo José nos envía una nueva versión de la macro de Excel que nos permite unir varios Excel en uno. En este enlace en formato RAR tenéis un ejemplo de funcionamiento, donde el libro de Excel más importante es UNIR.XLSM. Las instrucciones de uso son: Ponemos todos los Excel que deseemos unir en un directorio. Ponemos UNIR.XLSM en ese directorio. Abrimos UNIR.XLSM y simplemente pulsamos el botón. Tenemos un nuevo libro llamado UNIDOS.XLS. Así de sencillo. El código que emplea la macro es visible; su autor no pone problemas. Muchas gracias, José, por esta macro tan sencilla y tan práctica; seguro que muchos de vosotros la encontraréis muy útil. Yo la encuentro genial. Saludos.

25 de septiembre de 2012 · rvaquerizo

Cuánto dinero pierdo jugando a la lotería. Una simulación poco seria con R

Esta pantalla es muy habitual en mi televisor todos los jueves por la noche. Son los resultados de la Lotería Nacional de España, el sorteo de los jueves. Mi mujer insiste en comprar lotería para dejar de ser pobres. No es una buena opción. Aunque, por lo menos, ahora compramos lotería nacional. Antes jugábamos a eso de la Bonoloto; las probabilidades de que te toque son menores que la cantidad de sustancias dopantes que le encontraron al gran Alberto Contador. Eso lo entendió, pero había que jugar. ¿Y cuánto nos cuesta jugar? ...

18 de septiembre de 2012 · rvaquerizo

Macro SAS. Variables de un dataset en una macrovariable

Hoy os presento una macro de SAS que nos permite recoger en una macrovariable las variables de un conjunto de datos SAS. Tiene como particularidad que nos sirve para seleccionar aquellas variables que tienen un determinado patrón, del tipo consumo2010, consumo2011… Es un código un poco más complejo de lo habitual pero tiene aspectos interesantes: %macro lista_variables(ds=, nombre_mv=, patron=); * ES NECESARIO QUE LA MACROVARIABLE FINAL SEA GLOBAL; %global &nombre_mv.; * DETERMINAMOS LIBRERÍA Y TABLA; data _null_; length lib tab $255.; if index("&ds.", ".") = 0 then do; lib = "WORK"; tab = "&ds."; end; else do; lib = scan("&ds.", 1, "."); tab = scan("&ds.", 2, "."); end; call symput('libreria', upcase(lib)); call symput('tabla', upcase(tab)); run; * BUSCAMOS EN DICTIONARY DE SAS (VCOLUMN); proc sql noprint; select compress(name) into :&nombre_mv. separated by " " from sashelp.vcolumn where libname = "&libreria." and memname = "&tabla." and upcase(name) like "%" || "%upcase(&patron.)" || "%"; quit; %mend; El elemento principal de esta macro es una consulta a una de las tablas DICTIONARY de SAS, o mejor dicho, a una de las vistas que tenemos en SASHELP. Siempre he preferido consultar las vistas de SASHELP. La vista consultada es VCOLUMN, de donde extraemos la columna NAME, y como condicionantes pasamos la librería en LIBNAME y el nombre de la tabla en MEMNAME. Como particularidad, podemos filtrar por patrones de nombre. ...

6 de septiembre de 2012 · rvaquerizo

Macro (fácil) de SAS. Longitud de la parte decimal de un número

Muy sencillo; vemos el programa y posteriormente lo transformamos in una macro de SAS: data aleat; do i = 1 to 100; aleatorio = ranuni(8) * 1000; largo_decimal = length(scan(put(aleatorio, best32.), 2, ".")); output; end; run; Sencillo: pasamos de número a carácter con PUT y buscamos el punto con SCAN, extraemos la segunda parte del carácter separado por punto y vemos su longitud con LENGTH. Esto pasado a una macro: %macro largo_decimal(num); length(scan(put(&num., best32.), 2, ".")) %mend; data aleat; do i = 1 to 100; aleatorio = ranuni(8) * 1000; largo_decimal = %largo_decimal(aleatorio); output; end; run; Sencillo; a mí hoy me ha sido útil. Saludos.

23 de agosto de 2012 · rvaquerizo