Archivo de la etiqueta: 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:


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.

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:

  • Si queremos calcular el número de meses entre 01-01-2002 y el 02-04-2003 empleamos INTCK porque el resultado será 3 meses.
  • Si queremos añadir 5 meses al 01-01-2002 empleamos INTNX porque el resultado será una fecha.

Creo que así queda más claro. INTCK nos devuelve un valor entero e INTNX nos devuelve una fecha. Quedando claro esto a ver ejemplos:

Sumamos 2 años a una fecha:


data _null_;
f1="03MAY2005"d;
f2=intnx("year",f1,2);
format f2 ddmmyy10.;
put f2 ;
run;

IMPORTANTE: INTNX en este caso no ha funcionado como cabía esperar. El resultado es 01/01/2007, inicia a 1 de enero siempre. Siempre me gusta empezar con este ejemplo, motivo, para justificar que, en la medida de lo posible, no utilicemos esta función. ¡¡Pues vaya castaña de monográfico!! Sigue leyendo Monográfico. Funciones INTNX e INTCK para fechas en SAS