Debido al gran número de búsquedas que llegan a AyD con el tema de las fechas y horas de SAS, me he decidido a realizar un pequeño monográfico sobre estas variables en SAS. Principalmente se estudiará:
- Introducción a las fechas y horas SAS.
- Formatos de fecha y hora en SAS.
- Funciones de fecha y hora en SAS.
En esta primera entrega del monográfico, veremos cómo se guardan internamente las variables fecha en SAS y cómo hacemos referencia a ellas dentro de nuestros pasos DATA o procedimientos.
En SAS, las variables o son numéricas o son alfanuméricas (carácter); en el caso de las variables fecha, se almacenan como numéricas y son el número de días respecto al 1 de enero de 1960. Las variables hora también son numéricas y se almacenan como el número de segundos transcurridos desde el 1 de enero de 1960 a las 0 horas. Ejecutemos el siguiente programa SAS:
data _null_;
y = 0;
x = 0;
format x date9.;
put x = ;
format y datetime19.;
put y = ;
run;
Obtenemos en el log:
x=01JAN1960
y=01JAN1960:00:00:00
Vemos que el 01JAN1960:00:00:00 es el punto 0 de todas las fechas en SAS. Todas están limitadas a -138.061 (1 de enero de 1582) y 6.589.335 (31 de diciembre de 20000). Podemos realizar operaciones con ellas; analicemos un ejemplo que nos permitirá estudiar cómo se referencian fechas en código SAS:
data _null_;
* ESPECIFICAMOS UNA FECHA;
f1 = '01JAN2006'd;
* SIEMPRE 'DDMMMAAAA'd;
f2 = "31DEC2006"d;
dif = f2 - f1;
put "La diferencia en días entre f1 y f2 es: " dif;
f3 = '01JAN2006:00:00:00'dt;
f4 = '01JAN2006:00:01:30'dt;
dif2 = f4 - f3;
put "La diferencia en segundos entre f3 y f4 es: " dif2;
f5 = '00:00:00't;
f6 = '01:00:00't;
dif3 = f6 - f5;
put "La diferencia en segundos entre f5 y f6 es: " dif3;
run;
Las fechas en SAS se referencian como 'DDMMMAA'd o 'DDMMMAAAA'd, las fechas-hora se referencian como 'DDMMMAA:HH:MM:SS'dt o 'DDMMMAAAA:HH:MM:SS'dt, y las horas como 'HH:MM:SS't. Podemos emplear tanto comillas simples como comillas dobles para referenciar las fechas.
Es muy importante que, cada vez que trabajemos con fechas y horas en SAS, tengamos en cuenta la unidad de tiempo en la que estamos trabajando. Para fechas, la unidad serán los días; para fechas-hora y horas, la unidad serán los segundos. Esto es fundamental si deseamos sumar o restar valores a fechas:
data _null_;
f1 = '01JAN2006'd;
suma1 = f1 + 365; * SUMA EN DIAS;
put suma1 = ;
resta1 = f1 - 365;
put resta1 = ;
f2 = '01JAN2006:00:00:00'dt;
suma2 = f2 + 86400; * SUMA EN SEGUNDOS (1 día);
put suma2 = ;
resta2 = f2 - 3600; * RESTA EN SEGUNDOS (1 hora);
put resta2 = ;
run;
En el log tenemos:
suma1=17167
resta1=16437
suma2=1451779200
resta2=1451689200
Éstos son los números con los que guarda SAS internamente las fechas con las que hemos trabajado. En la siguiente entrega del monográfico, veremos cómo asignar formatos de fecha a las variables SAS para permitirnos visualizar mejor estos campos, como hicimos al inicio de este capítulo. Saludos.