Las fechas con SAS no están muy bien resueltas; con WPS pasa lo mismo. Era necesario un capítulo especial para hablar sobre fechas en WPS. En este blog ya se habló del tema. Y ahora, con WPS, la entrada será análoga: SAS = WPS.
Las funciones las vamos a dividir en cuatro grupos:
- Funciones de extracción de fecha.
- Funciones de creación de fecha.
- Funciones de duración.
- Funciones de intervalo.
Funciones de extracción de fecha
Nos permiten «extraer» información de variables de fecha/hora. Veamos un ejemplo para extraer la fecha y la hora de una variable fecha-hora:
data _null_;
x = "11NOV2008:03:15:00"dt;
* EXTRAEMOS LA FECHA DE UNA VARIABLE FECHA-HORA;
y = datepart(x); format y ddmmyy10.; put y=;
* EXTRAEMOS LA HORA DE UNA VARIABLE FECHA-HORA;
z = timepart(x); format z time10.; put z=;
run;
A partir de una variable fecha, podemos obtener el día (DAY()), el mes (MONTH()) o el año (YEAR()):
data _null_;
y = today();
format y ddmmyy10.;
dia = day(y);
mes = month(y);
anio = year(y);
put dia "/" mes "/" anio;
run;
Y a partir de una variable hora, podemos obtener la hora (HOUR()), el minuto (MINUTE()) y el segundo (SECOND()):
data _null_;
y = time();
format y time10.;
hora = hour(y);
minuto = minute(y);
segundo = round(second(y));
put hora ":" minuto ":" segundo;
run;
El número de segundos nos lo pone con decimales; por ello se puede emplear la función numérica ROUND() para redondear el valor y evitarlos.
Funciones de creación de fecha
Para generar fechas SAS a partir de datos numéricos disponemos de las siguientes funciones:
data _null_;
dia = 1;
mes = 1;
anio = 1960;
* CREACION DE VARIABLE FECHA;
y = mdy(mes, dia, anio); put y=;
* CREACION DE VARIABLE FECHA-HORA;
z = dhms(y, 0, 0, 0); put z=;
* CREACION DE VARIABLE HORA;
x = hms(1, 0, 0); put x=;
run;
La función MDY() genera variables fecha y le pasamos como parámetros Mes, Día y Año; es la función que emplearemos para pasar números o strings a fecha. Para DHMS(), que nos genera variables fecha-hora, los parámetros son fecha, hora, minuto y segundo. Por último, HMS() recibe hora, minuto y segundo.
Funciones de duración
La función de duración que emplearemos será DATDIF():
data _null_;
x = "01JAN1960"d;
y = today();
z = datdif(x, y, "ACT/ACT"); put z=;
m = datdif(x, y, "30/360"); put m=;
n = y - x; put n=;
run;
Observamos que DATDIF() recibe tres parámetros: fecha inicial, fecha final y la base. La base nos define en qué forma deseamos calcular la diferencia (en años de 365-366 días o en años con meses comerciales de 30 días). Si empleamos como base "ACT/ACT", la diferencia equivale a la resta aritmética de ambas fechas. Las bases se pueden combinar como "ACT/360" o "360/ACT".
Funciones de intervalo
Las funciones de intervalo que vamos a estudiar serán INTCK e INTNX. La primera de ellas determina el intervalo entre dos fechas en función de una base; la segunda determina una fecha en función de un intervalo y una base. Es decir, con INTCK obtenemos un número (ej: número de meses entre dos fechas) y con INTNX obtenemos una fecha (ej: sumar 11 meses a una fecha).
data _null_;
x = "01JAN2008"d;
y = today();
z = intck("week", x, y); put z=;
k = intck("month", x, y); put k=;
l = intck("hour", x, y); put l=;
m = intnx("month", x, 11); put m= ddmmyy10.;
n = intnx("day", x, 10); put n= ddmmyy10.;
p = intnx("year", x, -10); put p= ddmmyy10.;
run;
En la ayuda de SAS podemos encontrar más documentación y ejemplos sobre estas funciones. Como norma general tendremos: INTCK devuelve valores numéricos e INTNX devuelve fechas. Disponemos prácticamente de las mismas funciones en WPS.
En la siguiente entrega crearemos subconjuntos de variables en conjuntos de datos. Saludos.