Veröffentlicht am :
Funktion CREATION_INTERNE

Erstellung benutzerdefinierter Funktionen für Wochentage

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Skript beginnt mit der Erstellung eines Testdatensatzes, der einige Daten enthält. Es verwendet dann die Prozedur PROC FCMP, um zwei benutzerdefinierte Funktionen zu kompilieren und im Katalog `work.cat_function` zu speichern. Die erste Funktion, `DayWeek`, gibt den Namen des Wochentags (auf Französisch oder Englisch) für ein gegebenes Datum zurück. Die zweite Funktion, `NumDayWeek`, gibt die Nummer des Wochentags zurück (wobei 1 = Montag). Diese Funktionen werden anschließend getestet und auf den Datensatz `test` angewendet.
Datenanalyse

Type : CREATION_INTERNE


Die für den Test verwendeten Daten werden direkt im Skript über einen DATA-Schritt unter Verwendung der DATALINES-Anweisung generiert.

1 Codeblock
DATA STEP Data
Erklärung :
Erstellung einer temporären SAS-Tabelle namens 'test' mit einer 'date'-Variable, die mit Rohdaten (datalines) gefüllt wird, um die Funktionen zu testen.
Kopiert!
1DATA test;
2 INPUT date;
3 informat date date9.;
4 FORMAT date date9.;
5 DATALINES;
6 31DEC2016
7 05JAN2017
8 05APR2017
9 09JUL2017
10 10NOV2017
11 31DEC2017
12 ;
13RUN;
2 Codeblock
PROC FCMP
Erklärung :
Definition der benutzerdefinierten Funktion 'DayWeek', die ein Datum und einen Sprachcode ('EN' oder andere für FR) akzeptiert und den Namen des Wochentags zurückgibt. Die Funktion wird im Paket 'work.cat_function.test' kompiliert. Sie passt das Ergebnis von WEEKDAY an, sodass Montag der Tag 1 ist.
Kopiert!
1PROC FCMP outlib=work.cat_function.test;
2 function DayWeek(DateDay,Language $) $;
3 /* There is no test if DateDay is a real date.. */
4 Lg = Language;
5 nd=WEEKDAY(DateDay);
6 IF nd = 1
7 THEN
8 nd = 7;
9 ELSE
10 nd+-1;
11 LENGTH d $ 9;
12 IF Lg='EN' THEN DO;
13 select (nd);
14 when (1) d='monday';
15 when (2) d='tuesday';
16 when (3) d='wednesday';
17 when (4) d='thursday';
18 when (5) d='friday';
19 when (6) d='saturday';
20 when (7) d='sunday';
21 otherwise put 'Not a date !';
22 END;
23 END;
24 ELSE DO;
25 select (nd);
26 when (1) d='lundi';
27 when (2) d='mardi';
28 when (3) d='mercredi';
29 when (4) d='jeudi';
30 when (5) d='vendredi';
31 when (6) d='samedi';
32 when (7) d='dimanche';
33 otherwise put 'Not a date !';
34 END;
35 END;
36 return(d);
37 endsub;
38RUN;
3 Codeblock
DATA STEP Data
Erklärung :
Anwendung der Funktion 'DayWeek' auf die Tabelle 'test'. Erstellt zwei neue Spalten 'da' (Französisch) und 'da2' (Englisch). Hinweis: Damit dies ohne globale Optionen funktioniert, muss die SAS-Sitzung den Speicherort der CMPLIB-Funktionen kennen, obwohl die Option 'cmplib' hier nicht explizit definiert ist, wird sie oft benötigt.
Kopiert!
1DATA test;
2 SET test;
3 LENGTH da da2 $ 9;
4 FORMAT da da2 $9.;
5 da=DayWeek(date,'FR');
6 da2=DayWeek(date,'EN');
7RUN;
4 Codeblock
PROC FCMP
Erklärung :
Definition der zweiten benutzerdefinierten Funktion 'NumDayWeek'. Sie gibt die Nummer des Tages als Zeichenkette zurück, wobei Montag = 1 und Sonntag = 7 ist.
Kopiert!
1PROC FCMP outlib=work.cat_function.test;
2 function NumDayWeek(DateDay) $;
3 /* There is no test if DateDay is a real date.. */
4 nd=WEEKDAY(DateDay);
5 IF nd = 1
6 THEN
7 nd = 7;
8 ELSE
9 nd+-1;
10 LENGTH d $ 1;
11 d=put(nd,1.);
12 return(d);
13 endsub;
14RUN;
5 Codeblock
DATA STEP Data
Erklärung :
Anwendung der Funktion 'NumDayWeek' auf die Tabelle 'test', um die Spalte 'Numday' zu erstellen.
Kopiert!
1DATA test;
2 SET test;
3 LENGTH Numday $ 1;
4 FORMAT Numday $1.;
5 Numday=NumDayWeek(date);
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 : Author(s) : Nicolas DUPONT - Creation date : 14/04/2017