En las entregas anteriores del monográfico sobre fechas SAS hemos estudiado cómo almacena internamente las fechas el sistema y los formatos más prácticos de los que disponemos para visualizarlas. En esta última entrega, veremos algunas de las funciones de fecha y hora de las que dispone SAS.

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 (datetime):

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;

Funciones de creación de fecha

Nos permiten generar fechas SAS a partir de datos numéricos:

data _null_;
    dia = 1;
    mes = 1;
    anio = 1960;
    
    * CREACIÓN DE VARIABLE FECHA;
    y = mdy(mes, dia, anio); put y=;
    
    * CREACIÓN DE VARIABLE FECHA-HORA;
    z = dhms(y, 0, 0, 0); put z=;
    
    * CREACIÓN DE VARIABLE HORA;
    x = hms(1, 0, 0); put x=;
run;

MDY genera fechas y le pasamos como parámetros Mes, Día y Año. DHMS genera fecha-hora y requiere fecha, hora, minuto y segundo. HMS recibe hora, minuto y segundo.

Funciones de duración

Destacan DATDIF y YRDIF:

data _null_;
    x = "01JAN1960"d;
    y = today();
    
    z = datdif(x, y, "ACT/ACT"); put "Días (ACT/ACT): " z;
    m = datdif(x, y, "30/360");  put "Días (30/360):  " m;
    
    o = yrdif(x, y, "ACT/ACT");  put "Años (ACT/ACT): " o;
    p = yrdif(x, y, "30/360");   put "Años (30/360):  " p;
run;

Estas funciones reciben la fecha inicial, la fecha final y la base. La base define cómo calcular la diferencia (en años de 365-366 días o en meses comerciales de 30 días).

Funciones de intervalo

Estudiamos INTCK e INTNX. La primera determina el intervalo entre dos fechas; la segunda determina una fecha a partir de un intervalo y una base. Con INTCK obtenemos un número (ej: meses entre dos fechas) y con INTNX obtenemos una fecha (ej: sumar 30 meses a una fecha).

data _null_;
    x = "01JAN2008"d;
    y = today();
    
    z = intck("week", x, y);  put "Semanas: " z;
    k = intck("month", x, y); put "Meses:   " k;
    
    m = intnx("month", x, 11); put "Fecha + 11 meses: " m ddmmyy10.;
    n = intnx("day", x, 10);   put "Fecha + 10 días:  " n ddmmyy10.;
run;

En la ayuda de SAS podéis encontrar más documentación. Como norma general: INTCK devuelve valores numéricos (conteo de intervalos) e INTNX devuelve fechas. Espero que este monográfico os despeje dudas. Saludos.