Es habitual la necesidad de obtener diferencias entre fechas para realizar validaciones o ejecuciones condicionadas en los procesos. A continuación un sencillo ejemplo que obtiene diferencias entre fechas en diferentes unidades (días, meses, años) y realiza desplazamientos partiendo de una fecha determinada.
Así mismo, un paso data de ejemplo que obtiene todos los días de un mes determinado.
data funciones_f; length fecha1_num fecha2_num 8.; fecha1_num = 20121001; fecha2_num = 20131001; fecha_h_date = today(); run; data funciones_f_01(drop = fecha_h_date_suma_1dia fecha_h_date_suma_1mes fecha_h_date_suma_1anyo ); set funciones_f; /* Transformamos las variables numérica con contenido fecha yyyymmdd a variable tipo fecha */ fecha1_date = mdy((mod((int(fecha1_num/100)),100)),(mod(fecha1_num,100)),(int(fecha1_num/10000))); fecha2_date = mdy((mod((int(fecha2_num/100)),100)),(mod(fecha2_num,100)),(int(fecha2_num/10000))); /* Partiendo de una variable tipo fecha que contiene la fecha del día, la convertimos en un numérico con formato yyyymmdd */ fecha_h_num = input(put(fecha_h_date,yymmddn8.),8.); /* Obtenemos diferencias entre fechas en días, meses y años */ dif_dias=intck('day',fecha1_date,fecha2_date); dif_dias_lab = intck('weekday',fecha1_date,fecha2_date); /* Diferencia de días, en días laborables */ dif_meses=intck('month',fecha1_date,fecha2_date); dif_años=intck('year',fecha1_date,fecha2_date); /* Desplazamos la fecha del día en una unidad: días, meses o años */ fecha_h_date_suma_1dia = intnx('day',fecha_h_date,1); fecha_h_num_suma_1dia = input(put(fecha_h_date_suma_1dia ,yymmddn8.),8.); fecha_h_date_suma_1mes = intnx('month',fecha_h_date,1); fecha_h_num_suma_1mes = input(put(fecha_h_date_suma_1mes ,yymmddn8.),8.); fecha_h_date_suma_1anyo = intnx('year',fecha_h_date,1); fecha_h_num_suma_1anyo = input(put(fecha_h_date_suma_1anyo ,yymmddn8.),8.); /* Obtener el día, mes y año de la fecha del día */ dia_h = day(fecha_h_date); mes_h = month(fecha_h_date); anyo_h = year(fecha_h_date); /* Partiendo de la fecha del día en formato fecha-hora, dividir en fecha y hora */ datetime_h = datetime(); date_h = datepart(datetime_h); time_h = timepart(datetime_h); format date_h date9. datetime_h datetime. time_h time.; run; /* Obtener todos los días de un mes */ %let mes = 201309; data funciones_f_m (keep = dia_mes) ; dia_ini = &mes.01; i = 0; val_mes = 1; dia_mes_ini = mdy((mod((int(dia_ini/100)),100)),(mod(dia_ini,100)),(int(dia_ini/10000))); do while (val_mes = 1); dia_mes_aux = intnx('day',dia_mes_ini,i); i = i + 1; dia_mes = input(put(dia_mes_aux ,yymmddn8.),8.); if round(dia_mes/100) = &mes. then do; val_mes = 1; output; end; else do; val_mes = 0; end; end; run;