Trucos SAS. Número de días de un mes

29 Jul

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 SOLO DEVUELVE UN NUMERO;
&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 facilmente, 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 mas 1 en estudio. 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 dias;
run;

Buena referencia de uso de INTNX. Espero que os sirva de ayuda. Saludos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *