SAS9

Cómo recuperar la fecha y hora actuales

Simon 12 views

El problema con &SYSDATE

Si trabaja regularmente con SAS©, probablemente ya haya utilizado la macrovariable automática &SYSDATE. Sin embargo, un comportamiento específico puede sorprender a los usuarios: &SYSDATE no almacena la fecha actual, sino la fecha de inicio de la sesión SAS©.

Si inicia SAS© el lunes y deja su sesión abierta hasta el viernes, &SYSDATE siempre indicará la fecha del lunes. La única forma de actualizar esta variable es reiniciar SAS©, lo que no es ideal para procesos automatizados o sesiones de trabajo largas.

Entonces, ¿cómo obtener la fecha o la hora exacta en el momento de la ejecución sin desconectarse?


La Solución: La función %SYSFUNC

El método más robusto para obtener un valor dinámico (actualizado en tiempo real) consiste en utilizar la macrofunción %SYSFUNC. Permite ejecutar funciones SAS© estándar (como today(), time(), o datetime()) directamente en el lenguaje macro.

Aquí están los diferentes métodos para recuperar esta información, ya sea para crear macrovariables o para utilizarlas directamente en el código.

Note :
1. Recuperar la Fecha Actual (TODAY)
Para obtener la fecha actual, utilice la función today().

Opción A: Crear una macrovariable (valor bruto) Esto almacena la fecha como un número (el número de días desde el 01/01/1960). Útil para cálculos.
1%let today_raw = %sysfunc(today());
2 
3/* Résultat exemple : 23456 */
Note :
Opción B: Crear una macrovariable (formateada) Si necesita una fecha legible (ej: para un título de informe o un nombre de archivo), agregue un formato como segundo argumento en %sysfunc.
1%let today_str = %sysfunc(today(), date9.);
2 
3/* Résultat exemple : 19DEC2025 */
Note :
Opción C: Uso directo en un paso Data o PROC SQL No necesita una macrovariable si ya está en un paso Data.
1DATA _null_;
2 current_date = today();
3 put current_date date9.;
4RUN;
Note :
Recuperar la Hora y Fecha completa (DATETIME)
Si necesita más precisión (la hora exacta o la marca de tiempo completa), la lógica es la misma.

Para la marca de tiempo completa (Fecha + Hora):
1/* Valeur brute (secondes depuis 1960) */
2%let dt_raw = %sysfunc(datetime());
3 
4/* Valeur formatée (lisible) */
5%let dt_str = %sysfunc(datetime(), datetime20.);
6/* Résultat exemple : 19DEC2025:17:05:35 */

No confíe en &SYSDATE o &SYSTIME si su procesamiento requiere la hora precisa de ejecución, especialmente en entornos de servidor o sesiones de SAS© Enterprise Guide que permanecen abiertas por mucho tiempo. Siempre prefiera %sysfunc(today()) o %sysfunc(datetime()) para garantizar la exactitud de sus datos temporales.