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 sus elementos. Vamos a crear un script, un programa SAS, dentro de nuestro proyecto. Nos ubicamos en el Project Explorer, pulsamos el botón derecho y seleccionamos 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

El modelo multivariante en el sector asegurador. Los modelos por coberturas (V)

Debido a la pobre aceptación, había dado de lado esta serie de monográficos sobre la tarifa multivariante en el sector asegurador. Pero tengo una lectora que sí los seguía y, como yo me debo a mis lectores, continúo con la serie. Recapitulemos: como variables dependientes tenemos la frecuencia siniestral y el coste medio de los siniestros; las variables independientes serán aquellas que compongan la estructura de nuestra tarifa. Como prototipo para determinar qué variables forman parte de nuestro modelo, empleamos el multitarificador de ARPEM. Con este planteamiento, partimos de dos modelos: el modelo de frecuencias y el modelo de costes medios. Sin embargo, a la hora de ajustar, es muy importante plantear un modelo para cada una de las garantías. Parece lógico que el modelo multivariante para el contenido en una tarifa de hogar no ha de ser el mismo que el modelo para el continente. O centrándonos en el modelo de autos (sobre el que está girando nuestra serie), es necesario modelizar los siniestros de responsabilidad civil por un lado, los siniestros de daños propios por otro, defensa, robo… ...

27 de diciembre 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 aquel 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 Excel. Archivos de un directorio con una macro

Puede resultarnos útil tener todos los archivos de un directorio en una tabla de Excel. Si estamos documentando un proceso, si nos dan un gran número de ficheros y tenemos que realizar procesos repetitivos sobre ellos, si queremos tener inventariados nuestros programas… Para esto os planteo una macro bien sencilla que recorre un directorio y nos escribe los elementos que encuentra en él. El código Visual Basic para la macro en Excel no puede ser más sencillo: ...

2 de noviembre de 2010 · rvaquerizo

Emisión de bonos de la Generalitat Catalana. ¿Cómo permiten esto?

Iba a alertar sobre la emisión de bonos de la Generalitat. Pero en Gurusblog ya lo han hecho por mí. Además, su exposición es magistral. La expresión “tienes más peligro que los bonos de Rumasa” ha cambiado; ahora hay que decir “tienes más peligro que las emisiones de Montilla”. El caso es que no entiendo cómo permiten semejante engaño.

26 de octubre de 2010 · rvaquerizo

Trucos SAS. Mejor que hash IN para cruzar tablas

El otro día Fernando comentó que los cruces 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 realización de listas; ésto derivará en otro truco SAS en breves días. El caso es que me gustaría que probarais este código: * CONJUNTO DE DATOS GRANDE; data grande; do i = 1 to 20000000; idcliente = int(ranuni(0) * 1000000); output; end; drop i; run; * CONJUNTO DE DATOS PEQUEÑO, SIN DUPLICADOS; data pequenio; do i = 1 to 2000000; idcliente = int(ranuni(34) * 1000000); if mod(idcliente, 1132) = 0 then output; end; drop i; run; proc sort data=pequenio nodupkey; by idcliente; run; * CREAMOS LA LISTA EN UNA MACROVARIABLE; proc sql noprint; select idcliente into :lista separated by " " from pequenio; quit; * CRUCE MEDIANTE SENTENCIA IN; data machea5; set grande; if idcliente in (&lista.); run; Bueno, el tiempo de ejecución de este cruce de tablas es de unos pocos 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. ...

6 de septiembre de 2010 · rvaquerizo

Trucos R. Establecer la configuración local de una fecha

Cuando manejamos datos, las fechas nos producen muchos quebraderos de cabeza; por ejemplo, cuando tenemos que transformar un carácter a fecha. En mi opinión, R es una de las herramientas más flexibles y rápidas para trabajar con fechas (claro que, acostumbrado a SAS, cualquier otra herramienta me parece perfecta). A lo que vamos, imaginemos la siguiente situación: # ?as.Date x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960") z <- as.Date(x, "%d%b%Y") z # [1] NA NA "1960-03-31" "1960-07-30" Se trata de transformar un texto a fecha en R. El formato del texto es día, mes en inglés y año con cuatro cifras. Para transformar a fecha tenemos la función as.Date, que recibe como parámetros el objeto y el formato de la fecha (el más habitual sería %d/%m/%Y para 10/09/1976). Para meses en formato nombre empleamos %b, pero en este caso "1jan1960" nos produce un valor perdido; sin embargo, "31mar1960" sí se transforma correctamente. ¿Por qué motivo sucede esto? ...

2 de septiembre de 2010 · rvaquerizo

Trucos Excel. Gráficos con caracteres

Quería plantear hoy un truco Excel que no es un truco como tal, sino más bien una idea para que podáis hacer más vistosos vuestros informes con gráficos de caracteres, sobre todo para aquellos dinosaurios que hagáis muchos rankings o puntuaciones. La idea es muy sencilla: se trata de emplear la función REPETIR de Excel pero «con talento». =REPETIR("|"; E12) nos repite el pipe | tantas veces como le indiquemos en la casilla E12. Pero hay algo que sí tiene importancia: la fuente que elijamos para el pipe: ...

13 de agosto de 2010 · rvaquerizo

Lecciones de economía de un ignorante. Cosas que no comprendo

Juan Manuel de Prada escribió esto en ABC. Y yo he conocido a un tipo de Indra que es su doble. Pero siguiendo el hilo de este opinador, hay otra cosa que tampoco comprendo: el BBVA obtiene unos “buenos y sólidos resultados superando expectativas en ingresos”, incluido un escandaloso aumento de las comisiones, harina de otro costal. Bueno, pues tras obtener estos resultados con unos márgenes brutos asombrosos, va y emite unos bonos con un diferencial (no decir spread, que es de catetos) con respecto al Euribor a 3 meses (por favor, no decir mindswap) muy por encima de anteriores emisiones. ...

3 de agosto de 2010 · rvaquerizo

Entrenamiento, validación y test

Cuando realizamos modelos, hay 3 conjuntos de datos fundamentales: Conjunto de datos de entrenamiento: son los datos que entrenan los modelos. Conjunto de datos de validación: selecciona el mejor de los modelos entrenados. Conjunto de datos de test: nos ofrece el error real cometido con el modelo seleccionado. Para entender mejor su importancia y cómo funcionan, he preparado el siguiente esquema/ejemplo: Una empresa de telecomunicaciones, de cara a mejorar la efectividad de sus campañas comerciales, decide realizar un modelo de propensión a la desconexión. Se define un universo como los clientes activos al último día de un mes y se determina cuáles de ellos han desconectado nuestra línea al mes siguiente. Podría ser recomendable utilizar varias cosechas de clientes para evitar efectos estacionales o campañas agresivas de la competencia. Para el universo seleccionado, la tasa de desconexión se sitúa en un 12%. Este universo hemos de dividirlo en 2 partes. La primera de ellas formará el conjunto de datos de entrenamiento y validación y, aquí, es importante realizar un sobremuestreo estratificado del número de desconexiones para mejorar el entrenamiento del modelo. El estrato será «tiene evento» vs. «no tiene evento». En el esquema gráfico, aumento la proporción de desconexiones hasta un 50%; no es una proporción imprescindible: si nuestra muestra no nos permite esa proporción, algunos expertos con los que he trabajado y yo mismo aseguramos que un 20% de eventos puede ser suficiente; pero, si es posible, buscaremos el 50-50. En un árbol de decisión (por ejemplo), este sobremuestreo nos identificaría ramas extremas. Una vez definido el conjunto de datos sobremuestreado, lo separamos en entrenamiento y validación. Este dinosaurio siempre deja la proporción 70-30… ...

28 de julio de 2010 · rvaquerizo