SAS RETAIN para definir contadores.

Programacion SAS 1

Hoy tengo la grata fortuna de encontrarme con algo nuevo para mi en la programación SAS, resulta que requerí enumerar una secuencia de registros, donde la cantidad de registros por el nivel de agrupación es variable. A continuación les muestro el código que resultó con la ayuda de mis compañeros.

 

Otra descripción de la función RETAIN.

En otras palabras, la función RETAIN permite definir una nueva variables que tiene como principal función y característica: conservar su valor con el paso de los registros, de esta forma se puede "barrar" o "arrastrar" un valor, esto es especialmente util por ejemplo cuando necesitas contar, sumar o definir indicadores que cambian o se conservan de acuerdo a las características de cada registro.

 

Funciones similares a RETAIN.

 

La función LAG de SAS te permite recordar los valores del registro anterior, es como recordar lo que pasó hace dos días, te permite obtener el valor de una campo hace un, dos o tres registros atrás.

 

Ejercicio:

Se tiene un DATA donde se encuentran el id del alumno, id del examen, la fecha de aplicación del examen y la calificación. Obtener la lista de los primeros 6 exámenes  (por cada alumno) que realizaron los alumnos que tienen mas de 6 exámenes.

 

Código:

PROC SORT
 DATA = EXAMENES ;
 BY ALUMNOID FECHA ;
RUN ;

DATA EXAMENES ;
 SET EXAMENES ;
 BY ALUMNOID ;
 RETAIN EXAMEN 0 ;
 IF FIRST.ALUMNOID THEN EXAMEN = 0 ;
 EXAMEN = EXAMEN + 1 ;
RUN ;

PROC SQL ;
 CREATE TABLE WORK.PRIMEROS6EXAMENES AS
 SELECT * FROM EXAMENES
 WHERE ALUMNOID IN (SELECT ALUMNOID FROM EXAMENES WHERE EXAMEN > 6)
 AND EXAMEN < 7 ;
QUIT ;

 

Resultado:

Los alumnos que tienen menos de seis exámenes ya fueron excluidos en el data PRIMEROS6EXAMENES con la condición EXAMEN > 6, y solo se encuentran los primeros 6 exámenes (EXAMEN < 7) de cada alumno que tienen más de 6 exámenes en su historial.

 

Construcción de un data con valores aleatorios.

Queremos agradecer a David Cardenas por esta aportación al blog. Se trata de un sencillo código para generar un DATA con información aleatoria, de tal manera que podamos ver como funciona el código del RETAIN que les compartimos. RANUNI funciona para generar números aleatorios, INT extrae de cualquier número la parte entera y ROUND redondea la cifra a múltiplos de 0.1 en este caso.

 

DATA Examenes ;
FORMAT Fech DDMMYY10.;
DROP a b c d i raiz;
raiz=20;
Do i = 1 TO 500;
 a=1; b=5; c=1; d=7;
 ALUMNOID = int (a+(b-a) * ranuni (raiz));
 FECHA = "01JAN2015"d + i;
 NOTA = round (c+(d-c) * ranuni (raiz), 0.1);
 OUTPUT;
END;
RUN;

  

¿Que te pareció el ejemplo de estas funciones?

¿Que te parecio el contenido?