webinar@lunchtime · lesen sie alle zeilen, die den firmennamen sas beinhalten datentransformation...

40
Copyright © SAS Institute Inc. All rights reserved. Webinar@Lunchtime Perl Regular Expressions in Base SAS

Upload: others

Post on 09-Aug-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

Copyright © SAS Inst itute Inc. A l l r ights reserved.

Webinar@LunchtimePerl Regular Expressions in Base SAS

Page 2: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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.

Page 3: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

.

Page 4: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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.

Page 5: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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).

Page 6: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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)

Page 7: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 8: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 9: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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.

Page 10: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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)

Page 11: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 12: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 13: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

Copyright © SAS Inst itute Inc. A l l r ights reserved.

Grundlegende Perl Metazeichen I

Page 14: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

Copyright © SAS Inst itute Inc. A l l r ights reserved.

Grundlegende Perl Metazeichen II

Page 15: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

Copyright © SAS Inst itute Inc. A l l r ights reserved.

Grundlegende Perl Metazeichen III

Page 16: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 17: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 18: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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...

Page 19: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 20: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 21: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 22: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 23: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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)

Page 24: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 25: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 26: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 27: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 28: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 29: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 30: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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.

Page 31: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 32: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 33: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 34: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 35: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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;

Page 36: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

Copyright © SAS Inst itute Inc. A l l r ights reserved.

Fragen?

Page 37: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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!

Page 38: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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

Page 39: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

Copyright © SAS Inst itute Inc. A l l r ights reserved.

Nächstes Webinar@Lunchtime:

27. März 2017

Hash Objekte zum performanten Programmieren

Page 40: Webinar@Lunchtime · Lesen Sie alle Zeilen, die den Firmennamen SAS beinhalten Datentransformation Ändern Sie jedes Vorkommen von Dec zu December Datenvalidierung Herausfinden ungültiger

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?