En algunas ocasiones nos encontramos que en una tabla los campos de fecha aparecen en numérico y llevan los valores no informados rellenados con un 0. O sea, hay un 0 en vez de un nulo. En este artículo quiero ofreceros algunas opciones para convertir rápidamente estos números en un formato fecha de SAS tradicional, de forma que podamos operar normalmente con ellos. Veremos ejemplos cuando el campo de origen es de texto, o es numérico.
En primer lugar, una tabla para los ejemplos que van abajo:
data EJEMPLO;
fecha_inicio = 20220101;
fecha_fin = 20220331;
output;
fecha_inicio = 20220101;
fecha_fin = 0;
run;
Formato número YYYYMMDD a fecha
data FECHAS1;
set EJEMPLO;
format fc_inicio ddmmyyn8.;
if fecha_inicio = 0 then fc_inicio = .;
else fc_inicio = mdy(mod(floor(fecha_inicio/100),100),mod(fecha_inicio,100),floor(fecha_inicio/10000));
run;
Formato número DDMMYYYY a fecha
data FECHAS2;
set EJEMPLO;
format fc_fin ddmmyys10.;
if fecha_fin = 0 then fc_fin = .;
else fc_fin = mdy(mod(floor(fecha_fin/10000),100),floor(fecha_fin/1000000),mod(fecha_fin,10000));
run;
Convertir mes YYYYMM a fecha
A veces tienes un dato de fecha expresado como mes. El problema para crear una fecha a partir de él es que no conocemos el día, así que hay que asumir que nos valdría o el primer o el último día del mes. La forma de convertirlo es así:
data FECHAS3;
mes = 202208;
format fc_mes_1 fc_mes_2 ddmmyys10.;
/* primer día del mes */
fc_mes_1 = mdy(mod(mes,100),1,floor(mes/100));
/* último día del mes */
fc_mes_2 = intnx('month',mdy(mod(mes,100),1,floor(mes/100)),0,'e');
run;
Para saber algo más de los tipos de formato de fecha que puedes utilizar visita este link.