SAS

Truco SAS. Transformar variable caracter a fecha

Pregunta de una lectora, cómo pasar una variable caracter de la forma ’23/08/2015′ a una fecha SAS. Es muy sencillo y un buen ejemplo de uso de input:

data null;
y=’21/07/2014′;
x=input(y,ddmmyy10.);
format x ddmmyy10.;
put x=;
run;

Recordad, input de caracter a número y put viceversa. Saludos.

Mínimo de una matriz de datos en SAS

El otro día una lectora del blog me preguntaba como obtener el mínimo de una matriz de datos de 100×1000 con SAS. El ejercicio es muy práctico para ayudar a que se entienda mejor como “piensa” SAS. Probablemente esta lectora estaba pensando en complicados bucles que recorren, que almacenan, que arrastran,… con SAS las cosas no son así. El paso data es un bucle en si mismo y SAS no tiene pereza en crear tablas intermedias. Así que la mejor solución para encontrar ese mínimo sería:

Trucos SAS. Calcular percentiles como Excel o R

Alguna vez habréis calculado un percentil en Excel o en R y os saldrá distinto de SAS. Esto se debe a que los métodos de cálculo son distintos tanto R como Excel utilizan el mismo método consistente en una interpolación en función de la distancia entre los registros que dan la posición del percentil. SAS dispone de 5 métodos distintos para calcular el percentil y por defecto emplea el número 5 y ninguno de los 4 métodos restantes es el que utilizan R o Excel. Pero podemos programar el método de un modo sencillo, cuesta más entender porque no lo implementa SAS que calcularlo. A continuación tenéis una sencilla macro que calcula el percentil con el método de Excel:

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.

Determinar el mímino tamaño muestral para detectar un cambio en la fracción no conforme

Este año he aprendido algo sobre metodología 6 sigma para el control de la calidad, me gustó mucho lo que aprendí. Para la realización de algunos ejercicios cree libros Excel y algún proceso SAS. Hoy quería traeros al blog una macro de SAS que nos permite determinar el tamaño mínimo muestral para detectar un cambio en la fracción no conforme con una determinada probabilidad. El programa es un bucle de SAS que crea los límites de control para la fracción no conforme y estandariza la diferencia del límite superior con la nueva fracción no conforme. Se calcula la probabilidad que deja este dato estandarizado y el paso del bucle será el número mínimo de muestras. Es más sencillo el código que la definición:

PROC FCMP para crear funciones en SAS

Unas pinceladas del PROC FCMP para SAS. Este procedimiento nos permite crear nuestras propias funciones que posteriormente podremos utilizar en nuestras sesiones de SAS. yo he programado mucho en SAS y tengo que decir que no utilizo mucho este procedimiento por la propia filosofía de SAS. Al final siempre se tiende a crear una macro antes que una función, pero hay que reconocer que el lenguaje macro de SAS en ocasiones no es sencillo y muchos olvidamos el PROC FCMP. En mi caso concreto hago unas macros muy enrevesadas antes que programarme una función. Para ilustrar el ejemplo de uso vamos a crear una función dif_anios para determinar la diferencia en años entre dos fechas SAS. El código es:

Haciendo ventanas con %WINDOW en SAS

No es habitual emplear SAS BASE para crear menús o ventanas, aunque con el PROC PMENU se han hecho maravillas. Hoy vamos a poner un ejemplo sencillo de uso de %WINDOW para hacer el menú más simple posible con SAS BASE, nuestro objetivo es consultar los datos de un cliente sobre una tabla. Creamos unos datos aleatorios para ilustrar el ejemplo y una macro para hacer consultas:

data aleatorio(index=(id_cliente));
do id_cliente=1 to 11000;
	importe=ranuni(56)*450;
	output;
end;
run;
%macro selecciona(cli=);
proc sql;
select a.*
from aleatorio a
where id_cliente=&cli.;
quit;
%mend;

Partimos de una tabla con 2 variables id_cliente e importe y deseamos crear un menú en el que nos liste los datos para un id_cliente. Lo más sencillo que podemos hacer con SAS BASE es:

Trucos SAS. Calcular una edad

No penséis que restar dos fechas y obtener una diferencia en años entre ellas es un tema baladí. Ejecutad el siguiente código SAS para calcular la diferencia en años:

data uno;
format fecha1 ddmmyy10.;
do fecha1= 9000 to today();
output;
end;
run;

data uno;
set uno;
format fecha2 ddmmyy10.;
fecha2="15MAY2014"d;

edad = int((fecha2-fecha1)/365.25);

run;

data uno;
set uno;
if month(fecha1)=5 and day(fecha1)=15;
run;

Visualizad el conjunto de datos uno, la serie de edad asusta 28,28,27,25,24,24,… Está claro que algo falla. Hace ya tiempo que hablamos de ello en este mismo blog. Los ceros y los unos con los que guardan estas máquinas las cosas a veces nos juegan estas malas pasadas. Para evitar este problema os sugiero que empleéis la función de SAS YRDIF con la base ‘AGE’. Replicamos el ejemplo:

Truco SAS. Gráfico de correlaciones

Un truco SAS interesante para representar matrices de correlaciones. El ejemplo es muy sencillo, pero previamente tenéis que crear el conjunto de datos SAS para ilustrar el ejemplo. Así que lo primero que hay que hacer es ir a este enlace y copiar el código necesario para crear el conjunto de datos SAS auto. Una vez tenemos ese conjunto de datos de 74 observaciones y 12 variables sólo tenemos que emplear el PROC CORR con una sintaxis muy sencilla:

Un nuevo blog sobre SAS en español

Buenas noticias. Tenemos un nuevo blog sobre SAS en español:

Utilidades, recursos, ejemplos y documentación sobre la herramienta de B.I. SAS.

Esta buena iniciativa parte de Juan Vidal. Se agradece que la comunidad de programadores de SAS compartan sus conocimientos. Algo que no es muy habitual, al contrario pasa con otras herramientas para la gestión de la información y la estadística. Por supuesto esta iniciativa tiene su correspondiente link en esta web.

Espacios en SAS

Las funciones SAS más habituales para eliminar blancos son las que tenéis en la figura de arriba. Para llegar a ese conjunto de datos SAS hemos ejecutado el siguiente paso data:

data ejemplo;

st = "  Cuando  brilla   el sol    ";
l_st=length(st); output;

funcion="COMPRESS     "; st1 = compress(st);
l_st1=length(st1); output;

funcion="COMPBL";  st1 = compbl(st);
l_st1=length(st1); output;

funcion="TRIM";    st1 = trim(st);
l_st1=length(st1); output;

funcion="TRIMN";   st1 = trimn(st);
l_st1=length(st1); output;

funcion="STRIP";    st1 = strip(st);
l_st1=length(st1); output;

funcion="SRTIP+COMBBL"; st1 = strip(compbl(st));
l_st1=length(st1); output;

run;

Distintas formas de eliminar espacios dentro de una cadena de caracteres en SAS. Partimos de la variable string » Cuando brilla el sol » y empleamos las siguientes funciones:

Cuidado con el p-valor. Depende del tamaño de la muestra

El otro martes, Teresa mi profesora de la Facultad de Estudios Estadísticos, dijo una frase que me dejó helado.“Ojo con el p-valor porque depende del tamaño muestral” Estábamos estudiando regresión logística y test de independencia. Ahora que uno mismo vuelve a estudiar que es lo que hay detrás de la salida de los programas estadísticos se plantea muchas dudas. Por definición el p-valor depende del tamaño muestral y es una medida que la tomamos como un axioma para todo: El p-valor nunca miente hasta que tenemos mucha exposición. Voy a utilizar un ejemplo que vi en clase con Teresa ligeramente retocado (no creo que se enfade, no creo ni que lea esto). Trabajo con SAS porque estoy más acostumbrado a la salida que ofrece. Se trata de realizar un test de independencia para una tabla 2×2. La H0 o hipótesis nula es que existe independencia entre el factor de nuestro estudio y la variable dependiente en nuestro caso H0 es no hay relación entre la utilización de un pesticida y la presencia de una enfermedad frente a H1 hay relación entre la utilización del pesticida y la presencia de la enfermedad. Simulamos los datos con SAS:

Truco (muy fácil) de SAS. Leer un rango de una hoja Excel

Cuando tenemos rangos en nuestras hojas Excel y deseamos que se conviertan en tabla SAS podemos emplear la sentencia libname de este modo:

libname selec "C:\TEMP\rangos.xlsx";
data rango;
set selec.rango;
run;
libname selec clear;

Asisgnamos la librería al archivo Excel que deseamos leer y tan simple como referenciar al rango en nuestro paso data. Se interactúa fácil entre Excel y SAS. Saludos.