webinar@lunchtime · lesen sie alle zeilen, die den firmennamen sas beinhalten datentransformation...
TRANSCRIPT
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Webinar@LunchtimePerl Regular Expressions in Base SAS
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Perl Reguläre Ausdrücke (Perl Regular Expressions)Einleitung
Perl Regulare Ausdrücke beschreiben einen Text, der als Muster dient.
In einem solchen Ausdruck kann Klartext enthalten sein, aber auchMetazeichen, die für eine bestimmte Sorte von Zeichen stehen.
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Anwendung von Regulären AusdrückenReguläre Ausdrücke werden benutzt zur:
Zeichensuche innerhalb eines StringsLesen Sie alle Zeilen, die den Firmennamen SAS beinhalten
DatentransformationÄndern Sie jedes Vorkommen von Dec zu December
Datenvalidierung
Herausfinden ungültiger Telefonnummern
Suchen Sie SAS, aber nicht SASSY Kids.
Ändern Sie nicht Decade zu Decemberade!
0049-6221-8000, (0049)6221-8000, (0049) 6221-8000
.
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Perl Regular Expressions schreiben• Allgemeine Form eines Regulären Ausdrucks, um Musterüberein-
stimmungen herauszufinden
<m>/pattern/<options>
m match =Übereinstimmung
/ / Muster Trennzeichen
pattern Die Zeichen, die übereinstimmen sollen
options Optionen, um das Standardverhalten zu ändern, z. B. Suche nach Groß- und Kleinbuchstaben etc.
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Beispiele für Musterübereinstimmungen
Die Vergleiche sind case sensitive, Groß- und Kleinschreibung wird also berücksichtigt.Mit der Option i wird die Groß-und Kleinschreibung nicht berücksichtigt(i=ignore).
Copyright © SAS Inst itute Inc. A l l r ights reserved.
PRX FunktionenPRX= Perl Regular Expressions
Die PRX Funktionsfamilie beinhaltet z. B.:
• PRXPARSE (Muster festlegen)
• PRXMATCH (Musterübereinstimmgungherausfinden)
• PRXCHANGE (Zeichen/Wörter ersetzen)
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Syntaxanwendung für Perl Reguläre Ausdrücke
Perl Reguläre Ausdrücke werden in einem SAS Programm in folgender Vorgehensweise angewendet:
Definition des Perl Regulären Ausdrucks
PRXPARSE Funktion benutzen, um den Perl RegulärenAusdruck zu kompilieren (nur einmal für den Step)
Danach die PRXMATCH Funktion aufrufen, um eineMusterübereinstimmung herauszufinden
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Kompilierung eines Regulären Ausdrucks
Ein Perl Regulärer Ausdruck muss zuerst kompiliert werden, bevor er zur Musterüberprüfung genutzt werden kann.
Während der Kompilierung macht SAS Folgendes:
Syntax Check wird ausgeführt
Ein Anweisungsliste wird erstellt
Eine ID (sog. Regular-Expression-ID) wird als Identifier hinzugefügt
Copyright © SAS Inst itute Inc. A l l r ights reserved.
PRXPARSE Funktion:Kompilierung eines Perl Regulären Ausdrucks
• Allgemeine Form der PRXPARSE Funktion:
PRXPARSE (perl-regular-expression)
Perl RegulärerAusdruck
Eine Zeichenkonstante, Variable oder einAusdruck mit einem Wert, der ein Perl R. Ausdruck ist.
PRXPARSE gibt eine ID (Perl Regular Expression ID) zurück odereinen fehlenden Wert.
Copyright © SAS Inst itute Inc. A l l r ights reserved.
PRXMATCH Funktion: MusterübereinstimmungAllgemeine Form der PRXMATCH Funktion
Rückgabewert 0, wenn keine Übereinstimmung gefunden wurde.
PRXMATCH (reg-ex-id | perl-regular-expression, source)
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Code Beispiel: Perldemo1.sas
data Perldemo1;
text='Heidelberg, SAS Institut';
Muster=prxparse('m/S/');*Ein Muster,das gesucht wird (hier: Buchstabe S);
Gefunden= prxmatch(muster, text); *Herausfinden, ob das Muster gefunden
wird: nicht gefunden=0,gefunden=Position, an der das Muster beginnt (hier=13);
run;
Ergebnis:
Perl_demo1.sas
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Metazeichen in Perl Regulären Ausdrücken
In Perl Regulären Ausdrücken können sog. Metazeichen stehen, die als Platzhalter für bestimmte Zeichen /Klassen von Zeichen dienen.
Prime Sports LtdTeamsports IncPro Sportswear Inc
m/\bsports\b/i
Beispiel:Das \b Metazeichen begrenzt die Muster-übereinstimmung auf eine Wortgrenze
i: Groß- und Kleinschreibung wird ignoriert
Perl_demo2.sas
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Grundlegende Perl Metazeichen I
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Grundlegende Perl Metazeichen II
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Grundlegende Perl Metazeichen III
Copyright © SAS Inst itute Inc. A l l r ights reserved.
PRX Funktionen im Data StepWhere und Subsetting If Anweisung
PRX Funktionen können in einer WHERE oder Subsetting IF Anweisung stehen, um Daten zu filtern.
data data_set_name;set data_set_name;where where-expression;
run;
data data_set_name;set data_set_name;if expression;
run;
Ss
Copyright © SAS Inst itute Inc. A l l r ights reserved.
PRX Funktionen zum Filtern in Prozeduren
Auch in Prozeduren können PRX Funktionen angewendetwerden.
proc print data=data_set_name;where where-expression;
run;
proc sql;select col1<, col2, …coln>
from tablewhere where-expression;
quit;
Ss
Ss
Where Anweisung
Copyright © SAS Inst itute Inc. A l l r ights reserved.
PRX Funktionen zum Filtern in ProzedurenVergleich: Perl Reguläre Ausdruck vs like + Platzhalter
Eine Teilmenge soll gebildet werden mit dem Wort shoes in der Variablen product_name.
proc print data=orion.product_dim;where prxmatch('/\bshoes\b/i',product_name);var product_id product_name;
run;
Ss
proc print data=orion.product_dim;where product_name like '%Shoes%';var product_id product_name;
run;
Alternative:
ABER...
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Daten filtern: Szenario
Es soll eine Teilmenge gebildet werden, die das Wort Woman mit einigenVarianten beinhaltet, z. B. Women, Wmns, Woman’s, Women’s
Regulärer Ausdruck:
where prxmatch('/wo?m(a|e)?n/i', product_name);
Erklärung: nächste Folie
Alternative mit likeund Platzhaltern???
Perl_demo3.sas
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Daten filtern: Szenario Erklärung des Perl Regulären Ausdrucks
/ String beginnt
w Buchstabe w
o? Der Buchstabe o kann vorkommen oder auch nicht
m Buchstabe m
(e|a)? Buchstabe e oder a oder auch keiner von beiden
n Buchstabe n
/ String endet
i Klein-oder Großschreibung nicht berücksichtigen
/wo?m(e|a)?n/i
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXPARSE und PRXMATCH Funktionen
Im Folgenden sollen ungültige amerikanische Social Security Nummern heraufgefunden werden, die nicht dem Muster ddd-dd-dddd entsprechen.
Das Ergebnis beinhaltet 5 Zeilen:
Perl_demo4a.sas
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXPARSE Funktion
data invalidssn;
retain re;
set orion.salesstaff;
if _n_=1 then
re=prxparse('/\d{3}-\d{2}-\d{4}/');
if prxmatch(re, SSN)=0;
run;
Start des R. Ausdrucks
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXPARSE Funktion
data invalidssn;
retain re;
set orion.salesstaff;
if _n_=1 then
re=prxparse('/\d{3}-\d{2}-\d{4}/');
if prxmatch(re, SSN)=0;
run;
Übereinstimmung von genau 3 ZAHLEN (digits)
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXPARSE Funktion
data invalidssn;
retain re;
set orion.salesstaff;
if _n_=1 then
re=prxparse('/\d{3}-\d{2}-\d{4}/');
if prxmatch(re, SSN)=0;
run;
Ein Bindestrich muss folgen
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXPARSE Funktion
data invalidssn;
retain re;
set orion.salesstaff;
if _n_=1 then
re=prxparse('/\d{3}-\d{2}-\d{4}/');
if prxmatch(re, SSN)=0;
run;
Danach kommen exakt 2 Zahlen
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXPARSE Funktion
data invalidssn;retain re;set orion.salesstaff;if _n_=1 then
re=prxparse('/\d{3}-\d{2}-\d{4}/');if prxmatch(re, SSN)=0;
run;
Wieder ein Bindestrich
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXPARSE Funktion
data invalidssn;retain re;set orion.salesstaff;if _n_=1 then
re=prxparse('/\d{3}-\d{2}-\d{4}/');if prxmatch(re, SSN)=0;
run;
Exakt 4 Zahlen
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXPARSE Funktion
data invalidssn;retain re;set orion.salesstaff;if _n_=1 then
re=prxparse('/\d{3}-\d{2}-\d{4}/');if prxmatch(re, SSN)=0;
run;
Ende des Regulären Ausdrucks
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXMATCH Funktion
Das Zahlenmuster ist ddd-dd-dddd. Aber es werden NICHT alle5 Zeilen gefunden. Warum?
Invalid Social Security Numbers
Obs Employee_ID SSN
1 120121 42-8321-9822 120172 801-5A-36403 121081
Employee_ID SSN
121073 219-68-2436abc
121097 hello219-68-1098
Wo sind aber die beiden u.g. Zeilen???
Ergebnis
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXMATCH Funktion
Die PRXMATCH Funktion führt die Überprüfung auf 11 Zeichen aus, egal obdiese am Anfang noch Text haben oder am Ende.
Copyright © SAS Inst itute Inc. A l l r ights reserved.
DatenvalidierungPRXMATCH Funktion
Fügen Sie das Caret- (^) und das Dollarzeichen ($) hinzu, damit die PRXPARSE Function das Parsen (Überprüfen) an Position 1 startet (caret ^) für genau 11 Zeichen ($).
data invalidssn;
set orion.salesstaff;
re=prxparse('/^\d{3}-\d{2}-\d{4}$/');
if prxmatch(re, trim(SSN))=0;
run;
Perl_demo4b.sas
Copyright © SAS Inst itute Inc. A l l r ights reserved.
PRXPARSE Funktion: Besonderheit
• Die PRXPARSE Funktion muss nicht angegeben werden, wenninnerhalb der PRXMATCH Funktion ein Regulärer Ausdruck steht.
data invalidssn;
set orion.salesstaff;
if prxmatch('/^\d{3}-\d{2}- \d{4}$/',trim(SSN))=0;
run;
Beachten Sie: Die Trim-Funktion bewirkt, dass nachfolgende Leerzeichen entfernt werden, sonst klappt die Überprüfung nicht
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Vorbereitung auf die FrageEscape Zeichen erklären
• Finden Sie in product_name Produkte, die eine offene Klammerbeinhalten (z. B. Golf Polo (1/400) ).Aber: Eine Klammer wird als Metazeichen gelesen, also muss sie
“maskiert” werden.
\ Ein Escape Zeichen markiert den folgenden Text als ein Literal (Zeichenkette)
proc print data=orion.productlist noobs n;where prxmatch('?????',product_name);
run;
Die WHERE Anweisung muss daher folgendermaßen lauten:
where PRXMATCH('/\(/',product_name);
Perl_demo5a.sas
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Frage
• Wie muss die Where-Anweisung geändert werden, damit Sie aber alleWerte sehen, ob mit oder ohne Klammer beim Produkt?
a. where PRXMATCH('\',product_name);
b. where PRXMATCH('/\',product_name);
c. where PRXMATCH('//',product_name);
d. where PRXMATCH('',product_name);
proc print data=orion.productlist noobs n;where prxmatch('?????',productname);
run;
Perl_demo5b.sas
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Frage - Antwort
• Wie muss die Where-Anweisung geändert werden, damit Sie aber alleWerte sehen, ob mit oder ohne Klammer beim Produkt?
a. where PRXMATCH('\',product_name);
b. where PRXMATCH('/\',product_name);
c. where PRXMATCH('//',product_name);
d. where PRXMATCH('',product_name);
proc print data=orion.productlist noobs n;where prxmatch('?????',productname);
run;
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Fragen?
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Vielen Dank für Ihre Teilnahme
Interesse an weiterem Austausch?
• Diskutieren Sie mit uns in der XING-Gruppe Business Analytics mit SAS
• Sprechen Sie uns direkt an:[email protected]
Es gibt neue Zertifizierungspakete -Stellen Sie Ihr Wissen unter
Beweis!
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Weitere Informationen und Kurse zu diesem Thema…
SAS® Programmierung 3: Effiziente Techniken des Datenmanagements
20. – 22., 27. – 29. März 2017 LiveWebClass
03 . - 05. April 2017, Heidelberg
19. – 21. Juni 2017, Heidelberg
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Nächstes Webinar@Lunchtime:
27. März 2017
Hash Objekte zum performanten Programmieren
sas.com
Copyright © SAS Inst itute Inc. A l l r ights reserved.
Folien zum Download unter www.sas.de/lunchtime
WIE HAT IHNEN UNSER WEBINAR GEFALLEN?