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.