Macros SAS. Primer y último día del mes de una fecha SAS

Me debo a vosotros, mis lectores. Y he tenido visitas que buscaban como obtener el primer y el último día de un mes con SAS. Como Análisis y Decisión es una web personalizada voy a dar respuesta a esas búsquedas. Para ello tengo os planteo dos macros de SAS, además nos servirán para entender mejor la función INTNX para operar con fechas. El siguiente ejemplo parte de la necesidad de obtener, dada una fecha, el primer y último día del mes de la fecha dada:

data _null_;
format x y z date9.;
y="12JUN08"d;
*ULTIMO DÍA DEL MES EN FUNCION DE LA FECHA;
x=intnx("month",y,1)-1;
put x;
PRIMER DÍA DEL MES EN FUNCION DE LA FECHA;
z=intnx("month",y,0);
put z=;
run;

Vemos que la función intnx opera como base en meses. Para obtener el último día sumamos un mes a nuestra fecha de referencia y le restamos un día. Es importante reseñar que intnx suma un mes, pero no suma días, es decir, nos sitúa en el primer día del mes siguiente a nuestra fecha. Con este razonamiento si sumamos 0 meses nos pondrá en el primer día del mes que operamos. Curioso funcionamiento el de esta función...

Pues bien, ahora hemos de generar una función, una macro que nos realice este cálculo, nos podría permitir obtener el número de días transcurridos del mes (por ejemplo). La macro, muy sencilla, queda:


%macro finmes(fec);
intnx("month",&fec.,1)-1
%mend;
%macro inimes(fec);
intnx("month",&fec.,0)
%mend;

Como ejemplo de uso:

data _null_;
 fecha="06APR09"d;
 finmes=%finmes(fecha);
 inimes=%inimes(fecha);
 format finmes inimes ddmmyy10.;
 put finmes inimes;
run;

"Mira que es fácil" estaréis pensando muchos, y tenéis mucha razón. La función INTNX es lo que tiene. Como ejercicio os propongo que hagáis esta función con meses en formato AAAAMM típicos de las tablas particionadas Oracle. Por supuesto, si tenéis dudas o un trabajo bien remunerado en una empresa capaz de afrontar un periodo de crisis de 6 semestres... rvaquerizo@analisisydecision.es

Un comentario en “Macros SAS. Primer y último día del mes de una fecha SAS

Deja un comentario

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

[bws_google_captcha]