SAS9

Comment récupérer la date et l'heure actuelles

Simon 20 Aufrufe
Niveau de difficulté
Débutant
Veröffentlicht am :
Simon

Expertenrat

Simon

La variable &SYSDATE est un "faux ami" redoutable sur les serveurs d'entreprise où les sessions restent ouvertes plusieurs jours. Pour l'horodatage de vos logs ou l'archivage de vos fichiers, bannissez-la : seule l'utilisation dynamique de %sysfunc(datetime()) garantit que la date correspond au moment réel de l'exécution, et non au démarrage du serveur lundi dernier.

Le problème avec &SYSDATE

Si vous travaillez régulièrement avec SAS©, vous avez probablement déjà utilisé la macro-variable automatique &SYSDATE. Cependant, un comportement spécifique peut surprendre les utilisateurs : &SYSDATE ne stocke pas la date actuelle, mais la date de démarrage de la session SAS©.

Si vous lancez SAS© le lundi et que vous laissez votre session ouverte jusqu'au vendredi, &SYSDATE indiquera toujours la date de lundi. La seule façon de mettre à jour cette variable est de redémarrer SAS©, ce qui n'est pas idéal pour des processus automatisés ou de longues sessions de travail.

Alors, comment obtenir la date ou l'heure exacte au moment de l'exécution sans se déconnecter ?


La Solution : La fonction %SYSFUNC

La méthode la plus robuste pour obtenir une valeur dynamique (mise à jour en temps réel) consiste à utiliser la macro-fonction %SYSFUNC. Elle permet d'exécuter des fonctions SAS© standard (comme today(), time(), ou datetime()) directement dans le langage macro.

Voici les différentes méthodes pour récupérer ces informations, que ce soit pour créer des macro-variables ou pour les utiliser directement dans le code.

Note :
1. Récupérer la Date du Jour (TODAY)
Pour obtenir la date actuelle, utilisez la fonction today().

Option A : Créer une macro-variable (valeur brute) Cela stocke la date sous forme de nombre (le nombre de jours depuis le 01/01/1960). Utile pour les calculs.
1%let today_raw = %sysfunc(today());
2 
3/* Résultat exemple : 23456 */
Note :
Option B : Créer une macro-variable (formatée) Si vous avez besoin d'une date lisible (ex: pour un titre de rapport ou un nom de fichier), ajoutez un format comme second argument dans %sysfunc.
1%let today_str = %sysfunc(today(), date9.);
2 
3/* Résultat exemple : 19DEC2025 */
Note :
Option C : Utilisation directe dans une étape Data ou PROC SQL Vous n'avez pas besoin de macro-variable si vous êtes déjà dans une étape Data.
1DATA _null_;
2 current_date = today();
3 put current_date date9.;
4RUN;
Note :
Récupérer l'Heure et la Date complète (DATETIME)
Si vous avez besoin de plus de précision (l'heure exacte ou l'horodatage complet), la logique est la même.

Pour l'horodatage complet (Date + Heure) :
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 */

Ne vous fiez pas à &SYSDATE ou &SYSTIME si votre traitement nécessite l'heure précise de l'exécution, surtout dans des environnements serveurs ou des sessions SAS© Enterprise Guide qui restent ouvertes longtemps. Privilégiez toujours %sysfunc(today()) ou %sysfunc(datetime()) pour garantir l'exactitude de vos données temporelles.