Truco SAS. Tablas de una librería en una macrovariable

Me plantean una duda: cómo crear un conjunto de datos con las tablas de una librería en SAS y, posteriormente, generar una macrovariable con ellos. Ésta es una entrada análoga a otra del blog, pero sirve para recordar cómo funciona el ODS de SAS y el PROC DATASETS, un procedimiento que no he usado habitualmente pero que es muy potente. Lo primero que vamos a hacer es observar qué resultados arroja el PROC DATASETS en su sintaxis más sencilla para ver los contenidos de una librería: ...

24 de enero de 2017 · rvaquerizo

Macro SAS. Número de variables de un dataset en una macro

Una macro que nos permite saber el número de variables que tiene un conjunto de datos SAS. Es una petición de una lectora y la macro es análoga a otra que ya pusimos en el blog allá por 2010. Veamos cómo funciona: %macro numvars(datos); %global numvars; /*ABRIMOS EL CONJUNTO DE DATOS PARA VER SUS CARACTERISTICAS*/ %let datosid = %sysfunc(open(&datos)); /*SI ESTA ABIERTO ENTONCES LA FUNCION ATTRN NOS DA EL NUMERO DE VARIABLES*/ %if &datosid %then %do; %let numvars =%sysfunc(attrn(&datosid,nvars)); /*CERRAMOS EL CONJUNTO DE DATOS*/ %let rc = %sysfunc(close(&datosid));%end; %mend; data ejemplo; a=1; b=2; c=3; d=4; f=5; g=6; run; %numvars(ejemplo); %put _user_; Utilizamos las funciones I/O de SAS, en concreto ATTRN que unido a NVARS nos permite saber el número de variables que tiene un dataset, el número de variables lo ponemos en la macrovariable global &numvars.. ...

22 de enero de 2016 · rvaquerizo

Macro SAS. Crear variables dummy desde una variable categórica

En alguna ocasión ya he conjugado el verbo dumificar y, preparando una segmentación, he creado una macro SAS que genera variables dummy a partir de variables categóricas. Es decir, si la variable A toma valores 1, 2 y 3, tendría que generar A_1 con valor 1 si A toma 1 y con valor 0 en caso contrario; A_2 tiene valor 1 si A es igual a 2, y A_3 tiene valor 1 si A es igual a 3. No es complicado de comprender: pasamos de una variable con tres niveles a tres variables con valores 0 o 1. Para ésto podemos emplear array o la siguiente macro: ...

2 de diciembre de 2015 · rvaquerizo

Tipos de merge con SAS o WPS

Una chuleta con los tipos de MERGE que se pueden hacer en un paso DATA con SAS: Para aquellos que empiezan a trabajar con SAS será de mucha utilidad. Un saludo.

23 de diciembre de 2014 · rvaquerizo

Dividir en palabras un texto con SAS

Una duda que planteó una lectora del blog acerca de separar una cadena de caracteres separados por comas y crear observaciones en otra variable: ¡Hola! He buscado por toda la página, necesito ayuda urgente. Mi problema es el siguiente: Necesito separar una cadena de texto en una fila en varias filas, por ejemplo: cadena1,cadena2,cadena3 en: cadena1 cadena2 cadena3 Para encontrar la , utilizo scan, aunque podría ocupar anypunct para que encuentre la primera ,, luego la segunda ,, etc., y cortar con substr, length… Pero bueno, ya que tengo un método de separar el texto de la fila, ¿cómo hago para que cada palabra esté en una nueva fila? Ojalá me hayan entendido y me den una idea de cómo hacer eso en un PROC SQL, con una macro o como sea; ¡solo una pequeña orientación me serviría mucho, gracias! ...

12 de septiembre de 2013 · rvaquerizo

Atentos a los intervalos de confianza

Un intervalo de confianza es la zona en la que me fío de lo que estimo. Cuanto más amplia es esa zona menos me fío de lo que estimo, y cuanto más estrecha, más me fío de lo que estimo. Lo que pasa es que un intervalo de confianza, por definición, empieza con la famosa expresión: «dada una población de media $\mu$ y desviación típica $\sigma$…» ¡¡¡FU FU FU FU FU FU!!! ...

26 de julio de 2013 · rvaquerizo

SAS vs WPS. Diferencias de precio

Minequest tiene una actualización de los costes en software si se utiliza SAS o se utiliza WPS. Como vemos, es sustancialmente más económico emplear WPS. Y si hablamos de instalación en cliente/servidor, la diferencia se incrementa. En breve hablaré de las posibilidades estadísticas que ofrece WPS. De todos modos, visitad http://www.teamwpc.co.uk/products/wps y veréis los nuevos procedimientos que tiene la V3.

17 de mayo de 2013 · rvaquerizo

Analisis cluster con SAS. La importancia de las semillas en las k-medias

El PROC FASTCLUS en SAS nos permite realizar análisis de agrupamiento dirigido mediante el algoritmo de las k-medias. Este algoritmo tiene algunos problemas, pero nos puede servir para agrupar de forma multivariante observaciones. Es rápido, sencillo de explicar y, con algunas lagunas, no funciona mal. Como aproximación a nuestras segmentaciones puede ser muy práctico. Hoy se va a utilizar para identificar a los clientes más complicados de segmentar, a aquellas observaciones que quedan en las zonas grises (http://www.datanalytics.com/blog/2011/08/03/clustering-iii-sobresimplificacion/). ...

15 de abril de 2013 · 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

Truco SAS. Ver el contenido de un formato

Para ver los valores que toma un formato con SAS, tenemos que emplear el PROC FORMAT. La sintaxis es muy sencilla: proc format library = work.formats fmtlib; select &formato.; run; Tenéis que poner el nombre del formato sin punto. Sintaxis sencilla, pero difícil de recordar (por lo menos a mí me ha pasado). Saludos.

6 de febrero de 2013 · rvaquerizo