Veröffentlicht am :
Makro CREATION_INTERNE

Makro _COUNT: Elemente einer Liste zählen

Dieser Code ist auch verfügbar auf: Français English Español
Dieses Makro, benannt _COUNT, dient dazu, die Anzahl der Elemente in einer Zeichenkette zu bestimmen, in der die Elemente durch ein Trennzeichen getrennt sind. Standardmäßig ist das Trennzeichen ein Leerzeichen, kann aber über den Parameter 'SPLIT' geändert werden. Das Makro nimmt die zu analysierende Liste als Eingabe (positioneller Parameter ARG1 oder benannter TEXT). Es verfügt über eine 'NOTES'-Option, um das Ergebnis direkt im SAS©-Protokoll anzuzeigen. Ein einfacher Fehlerbehandlungsmechanismus ist enthalten, um Warnungen des Typs 'Apparent symbolic reference' abzufangen und die Ausführung bei Bedarf zu beenden. Der Code enthält auch einen kommentierten Abschnitt mit Validierungstests, der verschiedene Anwendungsfälle demonstriert.
Datenanalyse

Type : CREATION_INTERNE


Das Makro liest keine externen Daten oder Daten aus der SASHELP-Bibliothek. Es arbeitet ausschließlich mit den Zeichenketten, die ihm als Parameter beim Aufruf übergeben werden.

1 Codeblock
%PUT
Erklärung :
Zeigt anfängliche Hinweise im SAS-Protokoll an, einschließlich des Aufrufdatums und der Copyright-Informationen.
Kopiert!
1%put NOTE: You have called the macro _COUNT, 2022-06-07.;
2%put NOTE: Copyright (c) 2001-2022 Rodney Sparapani;
3 
2 Codeblock
MACRO
Erklärung :
Definition des Makros '_count'. Es initialisiert einen lokalen Zähler 'i' auf 0. Anschließend durchläuft eine '%do %while'-Schleife die Eingabezeichenkette ('text') mithilfe der Funktion '%qscan', um die Elemente einzeln basierend auf dem Trennzeichen 'split' zu extrahieren. Der Zähler 'i' wird für jedes gefundene Element inkrementiert. Nach der Schleife überprüft das Makro das Vorhandensein einer spezifischen Warnung und stoppt bei einem Problem die Ausführung. Andernfalls gibt es den endgültigen Wert des Zählers 'i' zurück. Wenn der Parameter 'notes' angegeben ist, wird der zurückgegebene Wert auch im Protokoll angezeigt.
Kopiert!
1%macro _count(arg1, text=&arg1, notes=, split=%str( ));
2 %local i;
3 %let i=0;
4 
5 %*DO %while(%LENGTH(%nrbquote(%scan(%nrbquote(&text), &i+1, &split))));
6 %DO %while(%LENGTH(%qscan(&text, &i+1, &split)));
7 %let i=%eval(&i+1);
8 %END;
9%IF "%_substr(%superq(syswarningtext), 1, 27)"="Apparent symbolic reference"
10%THEN %DO;
11 %put ERROR: _COUNT() cannot recover from warning: ABEND;
12 %_abend();
13%END;
14%ELSE &i;
15 
16 %IF %LENGTH(¬es) %THEN %put NOTE: _COUNT is returning the value: &i.;
17%mend _count;
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 : Copyright (c) 2001-2022 Rodney Sparapani. Der Code wird unter den Bedingungen der GNU General Public License (GPL) Version 2 oder höher vertrieben.