Das Skript beginnt mit einer ersten Initialisierung des Makros `%mcf_length` mit spezifischen Optionen (`wrap=YES`, `insert_cmplib=YES`). Ein `DATA STEP` wird dann verwendet, um `%mcf_length` mit einer Reihe von Eingabewerten (standardmäßige und spezielle fehlende Werte, ganze Zahlen unterschiedlicher Größenordnung) aufzurufen und die Ergebnisse über die Funktion `call symputx` in dedizierten Makrovariablen zu speichern. Diese Makrovariablen werden anschließend in einer Reihe von Aufrufen des Makros `%mp_assert` verwendet, das als Unit-Test-Mechanismus dient, um zu bestätigen, dass die von `%mcf_length` berechneten Längen den Erwartungen entsprechen. Das Skript enthält auch Überprüfungen der Systemmakrovariable `&syscc` vor und nach einer zweiten Initialisierung von `%mcf_length`, um die Systemintegrität und das Fehlen von Kompilierungs- oder Ausführungsfehlern sicherzustellen.
Datenanalyse
Type : CREATION_INTERNE
Das Skript stützt sich nicht auf externe SAS-Datensätze oder das SASHELP-System. Es arbeitet ausschließlich mit numerischen Literalen, die direkt im Code definiert sind, und den Ergebnissen von SAS-Makros, die dann in internen Makrovariablen gespeichert werden. Ein temporärer Datensatz 'test' wird durch den `DATA STEP` erstellt, wird aber hauptsächlich für den Aufruf von `call symputx` verwendet und enthält keine persistenten Daten.
1 Codeblock
Makroaufruf (%mcf_length)
Erklärung : Dieser Block führt die erste Initialisierung oder Neukompilierung des Makros `%mcf_length` durch. Die Parameter `wrap=YES` und `insert_cmplib=YES` sind spezifische Konfigurationsoptionen für dieses Makro, wahrscheinlich im Zusammenhang mit der Verwaltung von Makrobibliotheken oder der Integration des generierten Codes.
Kopiert!
%mcf_length(wrap=YES, insert_cmplib=YES)
1
%mcf_length(wrap=YES, insert_cmplib=YES)
2 Codeblock
DATA STEP Data
Erklärung : Dieser `DATA STEP` wurde entwickelt, um das Makro `%mcf_length` mit verschiedenen Eingaben zu testen. Für jeden Test wird die Funktion `mcf_length()` mit einem numerischen oder fehlenden Wert aufgerufen, und das Ergebnis wird in einer Makrovariable (z.B. `&null`, `&special`, etc.) unter Verwendung von `call symputx` gespeichert. Der erstellte Datensatz `test` ist ein Artefakt des `DATA STEP`, sein Inhalt wird jedoch nicht direkt zur Validierung verwendet.
Erklärung : Dieser Block enthält eine Reihe von Aufrufen des Makros `%mp_assert`, um Zusicherungen zu den Ergebnissen von `%mcf_length` und dem Systemstatus zu machen. Jeder `%mp_assert`-Aufruf bewertet eine Bedingung (`iftrue`) und liefert eine Testbeschreibung (`desc`). Diese Tests überprüfen, ob die berechneten Längen für verschiedene Szenarien, einschließlich fehlender Werte und Zahlen unterschiedlicher Längen, sowie den Status der Systemmakrovariable `&syscc` korrekt sind.
Kopiert!
%mp_assert(
iftrue=(%str(&null)=%str(0)),
desc=Check if NULL returns 0
)
%mp_assert(
iftrue=(%str(&special)=%str(3)),
desc=Check if special missing ._ returns 3
)
%mp_assert(
iftrue=(%str(&three)=%str(3)),
desc=Check for length 3
)
%mp_assert(
iftrue=(%str(&four)=%str(4)),
desc=Check for length 4
)
%mp_assert(
iftrue=(%str(&five)=%str(5)),
desc=Check for length 5
)
%mp_assert(
iftrue=(%str(&six)=%str(6)),
desc=Check for length 6
)
%mp_assert(
iftrue=(%str(&seven)=%str(3)),
desc=Check for length 3
)
%mp_assert(
iftrue=(%str(&eight)=%str(8)),
desc=Check for length 8
)
%mp_assert(
iftrue=(&syscc=0),
desc=Check syscc=0 before re-initialisation
)
1
%mp_assert(
2
iftrue=(%str(&null)=%str(0)),
3
desc=Check IF NULL returns 0
4
)
5
%mp_assert(
6
iftrue=(%str(&special)=%str(3)),
7
desc=Check IF special missing ._ returns 3
8
)
9
%mp_assert(
10
iftrue=(%str(&three)=%str(3)),
11
desc=Check for LENGTH3
12
)
13
%mp_assert(
14
iftrue=(%str(&four)=%str(4)),
15
desc=Check for LENGTH4
16
)
17
%mp_assert(
18
iftrue=(%str(&five)=%str(5)),
19
desc=Check for LENGTH5
20
)
21
%mp_assert(
22
iftrue=(%str(&six)=%str(6)),
23
desc=Check for LENGTH6
24
)
25
%mp_assert(
26
iftrue=(%str(&seven)=%str(3)),
27
desc=Check for LENGTH3
28
)
29
%mp_assert(
30
iftrue=(%str(&eight)=%str(8)),
31
desc=Check for LENGTH8
32
)
33
%mp_assert(
34
iftrue=(&syscc=0),
35
desc=Check syscc=0 before re-initialisation
36
)
4 Codeblock
Makroaufruf (%mcf_length)
Erklärung : Dieser zweite Aufruf von `%mcf_length` dient dazu, das Verhalten des Makros bei Neukompilierung oder mehrfacher Initialisierung zu testen. Er wird häufig in Unit-Tests verwendet, um sicherzustellen, dass das Makro mehrmals ohne unerwünschte Nebenwirkungen aufgerufen werden kann.
Kopiert!
%mcf_length(wrap=YES, insert_cmplib=YES)
1
%mcf_length(wrap=YES, insert_cmplib=YES)
5 Codeblock
Makroaufruf (%mp_assert)
Erklärung : Dieser letzte Aufruf von `%mp_assert` überprüft, ob die Systemmakrovariable `&syscc` nach der zweiten Initialisierung von `%mcf_length` immer noch 0 ist. Dies bestätigt, dass die Neukompilierung oder der zweite Aufruf des Makros keine größeren Systemfehler verursacht hat.
Kopiert!
%mp_assert(
iftrue=(&syscc=0),
desc=Check syscc=0 after re-initialisation
)
1
%mp_assert(
2
iftrue=(&syscc=0),
3
desc=Check syscc=0 after re-initialisation
4
)
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.
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.