Están entrando muchas visitas con las palabras «número de días de un mes en SAS». Y hoy vamos a dar respuesta a estas entradas con una macro y un truco de SAS. Si tenemos una fecha en formato AAAAMM numérica, típica de las particiones de Oracle, disponemos de la siguiente macro:
%macro dias(mes);
/* VARIABLES AÑO Y MES */
%let y = %sysfunc(int(&mes. / 100));
%let m = %sysfunc(mod(&mes., 100));
/* TRATAMIENTO ESPECIAL PARA LOS DICIEMBRES */
%if &m. = 12 %then %do;
%let m1 = 1;
%let y1 = %eval(&y. + 1);
%end;
%else %do;
%let m1 = %eval(&m. + 1);
%let y1 = &y.;
%end;
/* 01/MES MAS 1 - 01/MES */
%let ini = %sysfunc(mdy(&m., 1, &y.));
%let fin = %sysfunc(mdy(&m1., 1, &y1.));
%let dias = %eval(&fin. - &ini.);
/* AL FINAL LA MACRO SÓLO DEVUELVE UN NÚMERO */
&dias.
%mend;
* EJEMPLO DE USO;
data _null_;
pepin = %dias(200402);
put pepin =;
run;
Ejemplo muy sencillo de código macro y que se entiende muy fácilmente; como siempre, recomiendo que copiéis y peguéis en vuestro SAS y lo entenderéis enseguida. El caso es que calculo el número de días de un mes como la diferencia entre el día 1 del mes en estudio frente al día 1 del mes más 1.
Si disponemos de una fecha SAS, recomiendo usar la función INTNX para determinar el número de días del mes; ejemplo:
data _null_;
fecha = "02FEB2004"d;
fin_mes = intnx('month', fecha, 0, 'end');
dias = day(fin_mes);
put fin_mes = ddmmyy10. dias =;
run;
Buena referencia de uso de INTNX. Espero que os sirva de ayuda. Saludos.