Bucle de fechas con SAS para tablas particionadas

Partimos de un mes inicial hasta un mes final; es necesario crear una tabla SAS con dos variables: el inicio del mes y el final del mes. El trabajo con fechas en SAS, como todos sabemos, es una tarea un poco ardua. El título de la entrada también es un poco peculiar, pero es la respuesta a la duda que planteaba un lector: Cogemos dos fechas en formato `yyyymmaa` Ej: 20150101 a 20160131 Necesito una salida como la siguiente: 20150101 20150131 20150201 20150228 20150301 20150331 20150401 20150430 ... 20161101 20161130 20161201 20161231 Para que los datos pedidos en este periodo salgan en una tabla por mes con un PROC SQL ya diseñado que funciona, pero sin particionarlo en una tabla por mes en el log. Se me han ocurrido varias formas de hacerlo, pero a continuación os planteo la siguiente. Como referencia, hemos de irnos a una entrada anterior del blog, una entrada del 2008 cuando puse en marcha analisisydecision.es. ...

20 de diciembre de 2016 · rvaquerizo

Trucos SAS. Pasar fecha a carácter en SAS

Pasar números a carácter en SAS es un tema reiterativo tanto en entradas al blog como en búsquedas. Pero se le puede dar otra vuelta de tuerca. Se trata de transformar fechas a variables alfanuméricas, pero en este caso vamos a poner las fechas en formato español. Ejecutad este ejemplo en SAS: data uno; y = '30jan11'd; c0 = put(y, ddmmyy10.); c1 = upcase(put(y, ESPDFDD.)); c2 = upcase(put(y, ESPDFDE.)); c3 = upcase(put(y, ESPDFDN.)); c4 = upcase(put(y, ESPDFDT.)); c5 = upcase(put(y, ESPDFDWN.)); c6 = upcase(put(y, ESPDFMN.)); c7 = upcase(put(y, ESPDFMY.)); c8 = upcase(put(y, ESPDFWDX.)); c9 = upcase(put(y, ESPDFWKX.)); run; Imagino que todos tenéis el NLS de SAS instalado y no tenéis problemas con estos formatos. Resumamos qué nos ofrece cada una de estas transformaciones: ...

11 de abril de 2012 · rvaquerizo

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 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. ...

29 de julio de 2010 · rvaquerizo

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 cómo 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, por lo que el resultado que ofrece será una fecha; e INTCK sirve para trabajar con intervalos, por lo que el resultado que nos ofrece será un número entero. Ésta es la premisa fundamental. Entonces: ...

6 de julio de 2010 · rvaquerizo

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

Me debo a vosotros, mis lectores. He tenido visitas que buscaban cómo 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, 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 el último día de su mes: ...

23 de diciembre de 2008 · rvaquerizo

Macros SAS. Transformar un numérico a fecha

A continuación, vamos a plantear una macro de SAS bastante sencilla que nos permitirá transformar valores numéricos del tipo 20080607 (fechas en formato AAAAMMDD pero que son numéricas) a valores fecha en SAS que nos permitirán realizar operaciones. Siguiendo el sistema de todos los mensajes de AyD, trabajaremos con ejemplos para estudiar su utilidad. Partimos de dos fechas en formato AAAAMMDD y deseamos realizar una diferencia entre ellas: data _null_; y = 20070101; m = 20080110; dif = m - y; put "Diferencia incorrecta: " dif; run; En el log obtenemos que la diferencia entre estas dos fechas es 10009; necesitamos transformarlas en variables numéricas pero del tipo fecha. Tenemos múltiples posibilidades para realizar esta transformación, pero en este caso voy a emplear la función de creación de fecha en SAS MDY(mes, día, año). ...

20 de noviembre de 2008 · rvaquerizo

Trabajo con fechas SAS. Funciones fecha

En las entregas anteriores del monográfico sobre fechas SAS hemos estudiado cómo almacena internamente las fechas el sistema y los formatos más prácticos de los que disponemos para visualizarlas. En esta última entrega, veremos algunas de las funciones de fecha y hora de las que dispone SAS. Las funciones las vamos a dividir en cuatro grupos: Funciones de extracción de fecha. Funciones de creación de fecha. Funciones de duración. Funciones de intervalo. Funciones de extracción de fecha Nos permiten «extraer» información de variables de fecha/hora. Veamos un ejemplo para extraer la fecha y la hora de una variable fecha-hora (datetime): ...

17 de noviembre de 2008 · rvaquerizo

Trabajo con fechas SAS. Formatos de fecha SAS más utilizados

En esta nueva entrega del monográfico de fechas SAS, vamos a estudiar algunos formatos. Un formato es la forma en la que visualizamos una variable. El valor 17327 es un número sin significado aparente, pero el 20 de junio de 2007 es una fecha comprensible. En la anterior entrega estudiamos cómo SAS guarda las fechas como variables numéricas (número de días transcurridos desde el 1 de enero de 1960). Las fechas-hora se guardan como el número de segundos transcurridos. Con los distintos formatos, nosotros podremos visualizar estas variables numéricas de SAS. Por ejemplo: ...

10 de noviembre de 2008 · rvaquerizo