INTNX

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

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:

Monográfico. Funciones INTNX e INTCK para fechas en SAS

Las funciones INTNX e INTCK de SAS atraen muchas visitas a esta web. Aunque ya hay algún mensaje en el que muestro como funcionan creo que algunos trabajadores me agradecerán este monográfico. INTNX e INTCK son funciones para trabajar con fechas en SAS. INTNX sirve para trabajar con periodos luego el resultado que ofrece será una fecha e INTCK sirve para trabajar con intervalos, luego el resultado que nos ofrece será un número entero. Esta es la premisa fundamental. Entonces: