SAS9

Cómo obtener la fecha y hora actuales

Simon 13 vistas

El problema con &SYSDATE

Si trabajas regularmente con SAS©, probablemente ya hayas 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 de SAS©.

Si inicias SAS© un lunes y dejas tu sesión abierta hasta el viernes, &SYSDATE siempre mostrará la fecha del lunes. La única forma de actualizar esta variable es reiniciar SAS©, lo cual no es ideal para procesos automatizados o sesiones de trabajo largas.

¿Cómo obtener entonces la fecha o la hora exacta en el momento de la ejecución, sin tener que desconectarse?


La solución: La función %SYSFUNC

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

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

Note :
1. Obtener la fecha de hoy (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 necesitas una fecha legible (por ejemplo, para el título de un informe o un nombre de archivo), añade 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 necesitas una macrovariable si ya estás dentro de un paso Data.
1DATA _null_;
2 current_date = today();
3 put current_date date9.;
4RUN;
Note :
Obtener la hora y la fecha completa (DATETIME)
Si necesitas 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íes en &SYSDATE o &SYSTIME si tu procesamiento requiere la hora exacta de ejecución, especialmente en entornos de servidor o sesiones de SAS© Enterprise Guide que permanecen abiertas durante mucho tiempo. Prefiere siempre %sysfunc(today()) o %sysfunc(datetime()) para garantizar la precisión de tus datos de tiempo.