Nueva edición del Curso Básico de R

Tenemos buenas noticias para todos aquellos que se quieran introducir en el mundo de R. El curso que se puso en marcha hace unos 9 meses tiene una nueva edición. Además se incorpora al equipo de formadores formado por Juan José Gibaja y Carlos Gil Juan Pablo Braña. No hace falta desear éxito. Está garantizado. Para más información A Q U Í «Retuitead», compartir, pulsar «Me Gusta» para que tenga el mayor alcance posible. Saludos.

5 de febrero de 2013 · rvaquerizo

Macros SAS. Macro split para partir un conjunto de datos

Debido a problemas con un servidor hace años descubrí la macro Split. Básicamente lo que hace es partir un conjunto de datos SAS en múltiples conjuntos de datos SAS con el mismo número de observaciones, además lo hace en un solo paso data. La forma de particionar el conjunto de datos es muy simple, si alguien tiene dudas con el código que lo comente y lo analizamos mejor. La macro (mejorada) es: ...

22 de enero de 2013 · rvaquerizo

¿Cómo medir la presencia de R en el mercado del análisis de datos?

Mientras comía hoy he estado leyendo el The Forrester Wave™: Big Data Predictive Analytics Solutions, Q1 2013 un informe sobre las herramientas de análisis predictivo con mayor presencia en el mercado. Las herramientas de SAS e IBM son las mejor paradas en el estudio: Típico gráfico bivariable con «pelotitas». No voy a entrar en la calidad del gráfico ni de la segmentación representada. Pero es difícil saber dónde quedaría R, tenemos a la gente de Revolutions Analytics pero en mi opinión no sirve para medir la presencia de R. Es evidente que tampoco es la intención de esta gente medir el uso de software no comercial, pero eso se averigua leyendo el análisis, no viendo los títulos. De momento me seguiré quedando con TIOBE. Saludos.

14 de enero de 2013 · rvaquerizo

SAS te felicita la Navidad

Mirad para que sirve call sound: data _null_; call sound(659,100); call sound(659,100); call sound(659,200); call sound(659,100); call sound(659,100); call sound(659,200); call sound(659,100); call sound(784,100); call sound(523,100); call sound(587,100); call sound(659,400); call sound(698,100); call sound(698,100); call sound(698,150); call sound(698,50); call sound(698,100); call sound(698,100); call sound(659,100); call sound(659,50); call sound(659,50); call sound(659,100); call sound(587,100); call sound(587,100); call sound(659,100); call sound(587,200); call sound(784,200); run; Felices Fiestas.

20 de diciembre de 2012 · rvaquerizo

Macros SAS. Contar las palabras de una macro variable

Una macro de SAS interesante que nos permite ahorrar código. Dada una macro variable necesitamos contar el número de palabras que tiene esta macro variable. Para ello vamos a crear una función con código macro: ```sas %let texto = uno dos tres; %macro cuenta(mv); %eval(%sysfunc(length(%cmpres(&mv.),%str( ))) - %length(&mv.) + 1) %mend; %put La Macrovariable Texto tiene %cuenta(&texto.) palabras; Vemos que la macro variable texto tiene tres palabras y necesitamos contabilizarlas para automatizar un código. La propuesta que se plantea es el cálculo de la longitud de la macro sin espacios frente a la longitud de la macro variable con espacios. La diferencia más uno será el número de palabras de nuestro texto. Como aspectos interesantes tenéis el uso de %str( ) , %cmpres y como se juega con %sysfunc para evitar algún que otro problema. Esta macro tiene sus problemas, no pongáis más de dos espacios que la volvéis loca. Pero puede resultar muy útil para determinadas cosas. Saludos.

11 de diciembre de 2012 · rvaquerizo

Trucos Excel. Pasar de caracter 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 Carlospodé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 como 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 aun 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 SAS. La macro se llama iterlist y la he encontrado en este enlace. Es código SAS muy avanzado: %macro iterlist(code =,list =); %*** ASSIGN EACH ITEM IN THE LIST TO AN INDEXED MACRO VARIABLE &&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; %*** STORE THE COUNT OF THE NUMBER OF ITEMS IN A MACRO VARIABLE: &CNTITEM; %let cntitem = %eval((&i. - 1); %*** EXPRESS CODE, REPLACING TOKENS WITH ELEMENTS OF THE LIST, IN SEQUENCE; %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 poner listas de código. Imaginemos que tenemos que hacer la siguiente tarea: ```sas data importes sasuser.importes; drop i j; array importe(10) ; do i=1 to 20000; do j=1 to 10; importe(j)=ranuni(8)*1000; end; grupo=ranpoi(4,5); output; end; run; proc summary data=importes nway; class grupo; output out = agr_grupo (drop=_type_ _freq_) mean(importe1)=media_importe1 mean(importe2)=media_importe2 ... mean(importe10)=media_importe10 sum(importe1)=suma_importe1 ... sum(importe10)=suma_importe10; quit; Necesitamos hacer un `proc summary` de 10 variables y de ellas vamos a calcular media y suma, tendremos que poner _sum_ y _mean_ por tantas variables como correspondan. Estamos repitiendo un código. Pues bien, esta macro nos permite repetir el código dada una lista, en este caso la lista se la pasamos como una macro: ```sas %let lista = importe1 importe2 importe3 importe4 importe5 importe6 importe7 importe8 importe9 importe10; proc summary data=importes nway; class grupo; output out = agr_grupo (drop=_type_ _freq_) %iterlist(list = &lista., code = %str( mean(?)=media_? )) %iterlist(list = &lista., code = %str( sum(?)=suma_? )); quit; Impresionante. Donde ponemos `?` la macro pone los elementos de la lista y en el parámetro code ponemos el código que se repite con `%str`. A este que escribe ahora mismo se le han caído los pantalones ante semejante genialidad. Impresionante.

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 descipció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

Macro SAS. Variables de un dataset en una macro variable

Hoy os presento una macro de SAS que nos permite recoger en una macro variable 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: options mlogic mprint; %macro lista_variables (ds= , nombre_mv= , patron=); *ES NECESARIO QUE LA MACROV FINAL SEA GLOBAL; %global &nombre_mv.; *PUEDE SER QUE LA LIBRERIA SEA WORK O PERMANENTE; data _null_; length lib tab $255.; if index("&ds.",".")=0 then lib="WORK"; else lib=scan("&ds.",1,".") ; put lib=; call symput('libreria',lib); tab=scan("&ds.",2,".") ; call symput('tabla',tab); run; *BUSCAMOS EN DICTIONARY DE SAS; proc sql noprint; select compress(name) into:&nombre_mv. separated by " " from sashelp.vcolumn where libname=upcase("&libreria.") and memname=upcase("&tabla.") and /*PODEMOS APLICAR UN PATRON*/ 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 prefererido 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 de la que deseamos obtener las variables en MEMNAME. Como particularidad podemos aplicar patrones. ...

6 de septiembre de 2012 · rvaquerizo