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!
data test;
input date;
informat date date9.;
format date date9.;
datalines;
31DEC2016
05JAN2017
05APR2017
09JUL2017
10NOV2017
31DEC2017
;
run;
1
DATA 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
;
13
RUN;
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!
proc fcmp outlib=work.cat_function.test;
function DayWeek(DateDay,Language $) $;
/* There is no test if DateDay is a real date.. */
Lg = Language;
nd=WEEKDAY(DateDay);
IF nd = 1
THEN
nd = 7;
ELSE
nd+-1;
length d $ 9;
if Lg='EN' then do;
select (nd);
when (1) d='monday';
when (2) d='tuesday';
when (3) d='wednesday';
when (4) d='thursday';
when (5) d='friday';
when (6) d='saturday';
when (7) d='sunday';
otherwise put 'Not a date !';
end;
end;
else do;
select (nd);
when (1) d='lundi';
when (2) d='mardi';
when (3) d='mercredi';
when (4) d='jeudi';
when (5) d='vendredi';
when (6) d='samedi';
when (7) d='dimanche';
otherwise put 'Not a date !';
end;
end;
return(d);
endsub;
run;
1
PROC 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'THENDO;
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
ELSEDO;
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;
38
RUN;
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!
data test;
set test;
length da da2 $ 9;
format da da2 $9.;
da=DayWeek(date,'FR');
da2=DayWeek(date,'EN');
run;
1
DATA test;
2
SET test;
3
LENGTH da da2 $ 9;
4
FORMAT da da2 $9.;
5
da=DayWeek(date,'FR');
6
da2=DayWeek(date,'EN');
7
RUN;
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!
proc fcmp outlib=work.cat_function.test;
function NumDayWeek(DateDay) $;
/* There is no test if DateDay is a real date.. */
nd=WEEKDAY(DateDay);
IF nd = 1
THEN
nd = 7;
ELSE
nd+-1;
length d $ 1;
d=put(nd,1.);
return(d);
endsub;
run;
1
PROC 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;
14
RUN;
5 Codeblock
DATA STEP Data
Erklärung : Anwendung der Funktion 'NumDayWeek' auf die Tabelle 'test', um die Spalte 'Numday' zu erstellen.
Kopiert!
data test;
set test;
length Numday $ 1;
format Numday $1.;
Numday=NumDayWeek(date);
run;
1
DATA test;
2
SET test;
3
LENGTH Numday $ 1;
4
FORMAT Numday $1.;
5
Numday=NumDayWeek(date);
6
RUN;
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
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.