Veröffentlicht am :
Makro CREATION_INTERNE

Verwaltung numerischer Datumskonvertierungen mit FCMP

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Skript enthält zwei FCMP-Funktionen: `DateToNum` konvertiert ein SAS©-Datum in eine ganze Zahl, die Jahr, Monat und Tag (JJJJMMTT) darstellt. `NumToDate` führt die umgekehrte Operation aus, nimmt eine JJJJMMTT-Ganzzahl und wandelt sie in ein gültiges SAS©-Datum um. Ein konkretes Beispiel wird zur Veranschaulichung ihrer Verwendung an einem Dummy-Datensatz bereitgestellt.
Datenanalyse

Type : CREATION_INTERNE


Die für die Beispiele verwendeten Daten werden direkt im Skript über einen DATA-Schritt mit `datalines` erstellt. Der Datensatz 'test' enthält SAS-Daten und deren numerische Äquivalente, um die Konvertierungsfunktionen zu demonstrieren.

1 Codeblock
DATA STEP Data
Erklärung :
Dieser DATA-Schritt erstellt den Datensatz 'test' mit zwei Variablen: 'date' (SAS-Datumsformat) und 'date2' (numerisches Format). Die Werte werden über `datalines` definiert, um als Konvertierungsbeispiele zu dienen.
Kopiert!
1DATA test;
2 INPUT date date2;
3 informat date date9.;
4 FORMAT date date9.;
5 DATALINES;
6 31DEC2016 20161231
7 01JAN2017 20170101
8 ;
9RUN;
2 Codeblock
PROC FCMP
Erklärung :
Dieser `PROC FCMP`-Block kompiliert die Funktion `DateToNum`. Sie nimmt ein SAS-Datum (`DateDay`), extrahiert Jahr, Monat und Tag und kombiniert sie dann zu einer einzigen Ganzzahl im JJJJMMTT-Format (z. B. 20161231 für den 31. Dezember 2016).
Kopiert!
1PROC FCMP outlib=work.cat_function.test;
2 function DateToNum(DateDay);
3 da = day(DateDay);
4 mo = month(DateDay);
5 ye = year(DateDay);
6 res = (ye * 10000) + (mo * 100) + da;
7 return(res);
8 endsub;
9RUN;
3 Codeblock
PROC FCMP
Erklärung :
Dieser `PROC FCMP`-Block kompiliert die Funktion `NumToDate`. Sie nimmt eine Ganzzahl im JJJJMMTT-Format (`DateNum`), leitet daraus Jahr, Monat und Tag ab und verwendet dann die Funktion `mdy`, um sie in ein standardmäßiges SAS-Datum umzuwandeln.
Kopiert!
1PROC FCMP outlib=work.cat_function.test;
2 function NumToDate(DateNum);
3 ye = int(DateNum/10000);
4 mo = int(DateNum/100)-(ye*100);
5 da = DateNum - (int(DateNum/100) * 100);
6 res = mdy(mo,da,ye);
7 return(res);
8 endsub;
9RUN;
4 Codeblock
DATA STEP
Erklärung :
Dieser DATA-Schritt verwendet die zuvor kompilierten Funktionen `DateToNum` und `NumToDate`. Er erstellt eine neue Variable 'Date2Num' durch Konvertierung der Variable 'date' (SAS-Datum) in ein numerisches Format und eine Variable 'num2date' durch Konvertierung der Variable 'date2' (numerisch) in ein SAS-Datumsformat.
Kopiert!
1DATA test;
2 SET test;
3 FORMAT num2date date9.;
4 Date2Num = DateToNum(date);
5 num2date = NumToDate(date2);
6RUN;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Creation date : 14/04/2017 (fr) Last update : 14/04/2017 (fr) Author(s) : Nicolas DUPONT