Incrementos de fecha

La función DATESUM calcula un valor de fecha u hora un número especificado de unidades a partir de un valor de fecha u hora determinado. La forma general de la función es:

DATESUM(datevar, value, "unit", "method").
  • datevar es una variable con formato de fecha/hora (o un valor numérico que representa un valor de fecha/hora válido).
  • value es un número positivo o negativo. Para unidades de longitud variable (años, trimestres, meses), los valores fraccionales se truncan en enteros.
  • "unit" es uno de los siguientes valores literales de serie entre comillas: años, trimestres, meses, semanas, días, horas, minutos, segundos.
  • "method" es una especificación opcional para unidades de longitud variable (años, trimestres, meses) entre comillas. El método puede ser "rollover" o "closest". El método rollover adelanta el exceso de días al mes siguiente. El método más cercano utiliza la fecha legítima más cercana dentro del mes. Este es el valor predeterminado.

Ejemplo

DATA LIST FREE /datevar1 (ADATE10).
BEGIN DATA
2/28/2004
2/29/2004
END DATA.
COMPUTE rollover_year=DATESUM(datevar1, 1, "years", "rollover").
COMPUTE closest_year=DATESUM(datevar1, 1, "years", "closest").
COMPUTE fraction_year=DATESUM(datevar1, 1.5, "years").
FORMATS rollover_year closest_year fraction_year (ADATE10).
SUMMARIZE 
 /TABLES=datevar1 rollover_year closest_year fraction_year
 /FORMAT=VALIDLIST NOCASENUM
 /CELLS=NONE.
Figura 1. Resultados de los cálculos de aplazamiento y año más próximo
Resultados de los cálculos de aplazamiento y año más próximo
  • El rollover y los métodos más cercanos arrojan el mismo resultado cuando se incrementa el 28 de febrero de 2004, en un año: 28 de febrero de 2005.
  • Utilizando el método de aplazamiento, el incremento del 29 de febrero de 2004 en un año devuelve un valor del 1 de marzo de 2005. Dado que no hay 29 de febrero de 2005, el día de exceso se pasa al mes siguiente.
  • Utilizando el método más cercano, el incremento del 29 de febrero de 2004 en un año devuelve un valor del 28 de febrero de 2005, que es el día más cercano en el mismo mes del año siguiente.
  • Los resultados de fraction_year son exactamente los mismos que para closest_year porque el método más cercano se utiliza de forma predeterminada y el parámetro de valor de 1.5 se trunca en 1 para las unidades de longitud variable.
  • Los tres mandatos COMPUTE crean nuevas variables que muestran valores en el formato F predeterminado, que para un valor de fecha es un entero grande. El mandato FORMATS especifica el formato ADATE para las nuevas variables.

Ejemplo

DATA LIST FREE /datevar1 (ADATE10).
BEGIN DATA
01/31/2003
01/31/2004
03/31/2004
05/31/2004
END DATA.
COMPUTE rollover_month=DATESUM(datevar1, 1, "months", "rollover").
COMPUTE closest_month=DATESUM(datevar1, 1, "months", "closest").
COMPUTE previous_month_rollover = 
  DATESUM(datevar1, -1, "months", "rollover").
COMPUTE previous_month_closest = 
  DATESUM(datevar1, -1, "months", "closest").
FORMATS rollover_month closest_month 
  previous_month_rollover previous_month_closest (ADATE10).
SUMMARIZE
  /TABLES=datevar1 rollover_month closest_month
   previous_month_rollover previous_month_closest
  /FORMAT=VALIDLIST NOCASENUM
  /CELLS=NONE.
Figura 2. Resultados de cálculos de mes
Resultados de cálculos de mes
  • Utilizando el método de vuelco, el incremento en un mes a partir del 31 de enero arroja una fecha en marzo, ya que febrero tiene un máximo de 29 días; y el incremento en un mes a partir del 31 de marzo y el 31 de mayo arroja el 1 de mayo y el 1 de julio, respectivamente, ya que abril y junio tienen cada uno solo 30 días.
  • Utilizando el método más cercano, si se incrementa en un mes a partir del último día de cualquier mes, siempre se obtendrá la fecha válida más cercana dentro del mes siguiente. Por ejemplo, en un año no bisiesto, un mes después del 31 de enero es el 28 de febrero, y un mes después del 28 de febrero es el 28 de marzo.
  • Utilizando el método de aplazamiento, la disminución en un mes (especificando un parámetro de valor negativo) desde el último día de un mes puede a veces producir resultados inesperados, ya que el exceso de días se retrotrae al mes original. Por ejemplo, un mes antes del 31 de marzo rinde el 3 de marzo para los años no bisiestos y el 2 de marzo para los años bisiestos.
  • Si se utiliza el método más cercano, la disminución de un mes a partir del último día del mes siempre dará como resultado la fecha válida más próxima dentro del mes anterior. Por ejemplo, un mes antes del 30 de abril, es el 30 de marzo (no el 31 de marzo), y un mes antes del 31 de marzo es el 28 de febrero en años no bisiestos y el 29 de febrero en años bisiestos.