SAS9

So rufen Sie das aktuelle Datum und die aktuelle Uhrzeit ab

Simon 13 Aufrufe

Das Problem mit &SYSDATE

Wenn Sie regelmäßig mit SAS© arbeiten, haben Sie wahrscheinlich bereits die automatische Makrovariable &SYSDATE verwendet. Ein spezifisches Verhalten kann jedoch Benutzer überraschen: &SYSDATE speichert nicht das aktuelle Datum, sondern das Startdatum der SAS©-Sitzung.

Wenn Sie SAS© am Montag starten und Ihre Sitzung bis Freitag geöffnet lassen, zeigt &SYSDATE immer das Montagsdatum an. Die einzige Möglichkeit, diese Variable zu aktualisieren, ist ein Neustart von SAS©, was für automatisierte Prozesse oder lange Arbeitssitzungen nicht ideal ist.

Wie erhalten Sie also das genaue Datum oder die genaue Uhrzeit zur Ausführungszeit, ohne sich abzumelden?


Die Lösung: Die Funktion %SYSFUNC

Die robusteste Methode, um einen dynamischen Wert (in Echtzeit aktualisiert) zu erhalten, ist die Verwendung der Makrofunktion %SYSFUNC. Sie ermöglicht die Ausführung von Standard-SAS©-Funktionen (wie today(), time() oder datetime()) direkt in der Makrosprache.

Hier sind die verschiedenen Methoden, um diese Informationen abzurufen, sei es zum Erstellen von Makrovariablen oder zur direkten Verwendung im Code.

Note :
1. Heutiges Datum abrufen (TODAY)
Um das aktuelle Datum zu erhalten, verwenden Sie die Funktion today().

Option A: Erstellen einer Makrovariablen (Rohwert) Dies speichert das Datum als Zahl (die Anzahl der Tage seit dem 01.01.1960). Nützlich für Berechnungen.
1%let today_raw = %sysfunc(today());
2 
3/* Résultat exemple : 23456 */
Note :
Option B: Erstellen einer Makrovariablen (formatiert) Wenn Sie ein lesbares Datum benötigen (z. B. für einen Berichtstitel oder einen Dateinamen), fügen Sie ein Format als zweites Argument in %sysfunc hinzu.
1%let today_str = %sysfunc(today(), date9.);
2 
3/* Résultat exemple : 19DEC2025 */
Note :
Option C: Direkte Verwendung in einem Data-Schritt oder PROC SQL Sie benötigen keine Makrovariable, wenn Sie sich bereits in einem Data-Schritt befinden.
1DATA _null_;
2 current_date = today();
3 put current_date date9.;
4RUN;
Note :
Uhrzeit und vollständiges Datum abrufen (DATETIME)
Wenn Sie mehr Genauigkeit benötigen (die genaue Uhrzeit oder der vollständige Zeitstempel), ist die Logik dieselbe.

Für den vollständigen Zeitstempel (Datum + Uhrzeit):
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 */

Verlassen Sie sich nicht auf &SYSDATE oder &SYSTIME, wenn Ihre Verarbeitung die genaue Ausführungszeit erfordert, insbesondere in Serverumgebungen oder SAS© Enterprise Guide-Sitzungen, die lange geöffnet bleiben. Bevorzugen Sie immer %sysfunc(today()) oder %sysfunc(datetime()), um die Genauigkeit Ihrer Zeitdaten zu gewährleisten.