Veröffentlicht am :
Makro CREATION_INTERNE

Entfernen von Duplikaten aus einer Liste

Dieser Code ist auch verfügbar auf: English Español Français
Dieses SAS©-Makro namens `nodup` akzeptiert als Eingabe eine Liste von durch Leerzeichen getrennten Elementen und einen optionalen Indikator für die Groß- und Kleinschreibung. Es durchläuft die Liste, vergleicht jedes Element mit den nachfolgenden und erstellt eine neue Liste, die nur die eindeutigen Elemente enthält. Es kann je nach Parameter `casesens` ('Y' für Groß-/Kleinschreibung beachten, 'N' für Groß-/Kleinschreibung ignorieren) im Fall-sensitiven oder Fall-insensitiven Modus arbeiten.
Datenanalyse

Type : CREATION_INTERNE


Das Makro verarbeitet eine als Eingabeargument bereitgestellte Zeichenkettenliste; es liest keine Daten aus externen Dateien oder SAS-Bibliotheken.

1 Codeblock
MACRO
Erklärung :
Dieser Codeblock definiert das Makro `%nodup`. Es akzeptiert zwei Parameter: `list` (die Eingabezeichenkette mit durch Leerzeichen getrennten Elementen) und `casesens` (ein 'Y'/'N'-Flag zur Aktivierung/Deaktivierung der Groß-/Kleinschreibung, Standard ist 'N'). Das Makro konvertiert zuerst `casesens` in Großbuchstaben und nimmt den ersten Buchstaben. Es bestimmt die Anzahl der Elemente in der Liste (`NumItems`). Eine äußere Schleife iteriert über jedes Element (`item`) der Liste. Für jedes `item` vergleicht eine innere Schleife dieses `item` mit den nachfolgenden Elementen in der Liste. Der Vergleich wird unter Berücksichtigung der Groß-/Kleinschreibung durchgeführt (wenn `casesens` 'Y' ist, ist der Vergleich direkt; andernfalls erfolgt er nach Konvertierung in Großbuchstaben). Wenn ein Element nach der aktuellen Position kein Duplikat hat, wird es als Makroausgabe angezeigt. Die Variablen `i`, `j`, `match`, `item` und `NumItems` werden als lokal deklariert, um Interferenzen mit anderen Makros oder globalen Variablen zu vermeiden.
Kopiert!
1/*
2/ Copyright © 2022, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
3/ SPDX-License-Identifier: Apache-2.0
4/
5/ Program : NoDup.sas
6/ Author : Noah Powers
7/ Created : 2019
8/ Purpose : Function-style macro to remove duplicates in a space-delimited list
9/ Usage : %let str=%nodup(aaa bbb aaa)
10/ Notes :
11/============================================================================================
12/ Parameters Usage
13/ -------------------------------------------------------------------------------------
14/ Name Description
15/ -------------------------------------------------------------------------------------
16/ list (positional) space delimited list of items to de-dup
17/ casesens Y/N Flag to make process case sensitive or not
18/============================================================================================*/
19%macro nodup(list,casesens=N);
20 
21 %local i j match item NumItems ;
22 
23 %IF not %LENGTH(&casesens.) %THEN %let casesens = N ;
24 %let casesens = %upcase(%substr(&casesens.,1,1));
25 %let NumItems = %words(&list.) ;
26 
27 %DO i = 1 %to &NumItems. ;
28 %let item = %scan(&list.,&i.,%str( ));
29 %let match = N ;
30 %IF (&i. < &NumItems.) %THEN %DO j = %eval(&i. + 1) %to &NumItems. ;
31 %IF (&casesens. = Y) %THEN %DO;
32 %IF "&item." = "%scan(&list.,&j.,%str( ))" %THEN %let match = Y ;
33 %END;
34 %ELSE %DO;
35 %IF "%upcase(&item.)" = "%upcase(%scan(&list.,&j.,%str( )))" %THEN %let match = Y ;
36 %END;
37 %END;
38
39 %IF (&match. = N) %THEN &item. ;
40 %END;
41 
42%mend ;
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 © 2022, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. SPDX-License-Identifier: Apache-2.0