Tipps & Tricks: Umkodieren von ICD-9-Daten zu · Tipps & Tricks: Umkodieren von ICD-9-Daten zu...
Transcript of Tipps & Tricks: Umkodieren von ICD-9-Daten zu · Tipps & Tricks: Umkodieren von ICD-9-Daten zu...
Tipps & Tricks: Umkodieren von ICD-9-Daten zu
ICD-10 in SAS mittels PROC SQL
Tipps & Tricks:Tipps & Tricks: Umkodieren von ICDUmkodieren von ICD--99--Daten zu Daten zu
ICDICD--10 in SAS mittels PROC SQL10 in SAS mittels PROC SQL
Andreas Deckert
Institute of Public Health, Universität Heidelberg
Andreas Deckert
Institute of Public Health, Universität Heidelberg
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Problemstellung
Mortalitäts-Follow-Up einer Kohorte von 1990 bis 2010
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Problemstellung
Mortalitäts-Follow-Up einer Kohorte von 1990 bis 2010
Kategorisierung der Todesursachen entsprechend ICD-10 (International Statistical Classification of Diseases and Related Health Problems)
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Problemstellung
Mortalitäts-Follow-Up einer Kohorte von 1990 bis 2010
Kategorisierung der Todesursachen entsprechend ICD-10 (International Statistical Classification of Diseases and Related Health Problems)
1998 Wechsel von ICD-9 zu ICD-10; dabei z.B. Einführung einer alpha-numerischen Notation mit stärkerer Differenzierung
keine direkte Übertragung möglich
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Problemstellung
Mortalitäts-Follow-Up einer Kohorte von 1990 bis 2010
Kategorisierung der Todesursachen entsprechend ICD-10 (International Statistical Classification of Diseases and Related Health Problems)
1998 Wechsel von ICD-9 zu ICD-10; dabei z.B. Einführung einer alpha-numerischen Notation mit stärkerer Differenzierung
keine direkte Übertragung möglich
“Umsteigertabelle” von ICD-9 zu ICD-10 vorhanden
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
ICD-Daten ICD-9 Tabelle (Textfile vom DIMDI):
ICD-10 Tabelle:
Umsteiger-Tabelle:
410-414; Ischämische Herzkrankheiten410; Akuter Myokardinfarkt...414; Sonstige Formen von chronischen ischämischen Herzkrankheiten414.0; Koronararteriosklerose414.1; Herzwandaneurysma
I21; Akuter MyokardinfarktI21.0; Akuter transmuraler Myokardinfarkt der Vorderwand...I22; Rezidivierender MyokardinfarktI22.0; Rezidivierender Myokardinfarkt der Vorderwand
ICD-10 ICD-9 ICD-9(dreistellig) 1:1I21.0; 410; 410; AI23.3; 429.8; 429; AI24.0; 410; 410;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Aufbau einer relationalen DatenbankPROC
SQL;
CREATE TABLE
ICD10 (Code10 CHAR(7), Titel10 CHAR(255), CONSTRAINT
Code10X PRIMARY
KEY(Code10));
INSERT INTO
ICD10SELECT
* FROM
import_ICD10 WHERE
Code10 > "";
CREATE TABLE
ICD9 (Code9 CHAR(7), Titel9 CHAR(255), CONSTRAINT
Code9X PRIMARY
KEY(Code9));
INSERT INTO
ICD9SELECT
* FROM
import_ICD9 WHERE
Code9 > "";
CREATE TABLE
Umsteiger (Code10 CHAR(7), Code9 CHAR(7), Automatik CHAR1),CONSTRAINT
UICD10 FOREIGN
KEY(Code10) REFERENCES
ICD10,
CONSTRAINT
UICD9 FOREIGN
KEY(Code9) REFERENCES
ICD9);INSERT INTO
Umsteiger
SELECT
* FROM
import_Umsteiger
WHERE
Code10 > "";quit;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Verknüpfungsschema
Code9 Code10 AutomatikA01.4 002.9 AA02.0 003.0 AA02.0 008.1A04.1 008.0 AA04.2 008.0 AA04.8 008.2
Code9 Titel9002.9 Text1003.0 Text2008.1 Text3008.0 Text4008.2 text5
Code10 Titel10A01.4 Text11A02.0 Text12A04.1 Text13A04.2 Text14A04.8 text15
1 0..n 0..n 1
ICD9 Umsteiger ICD10
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Wichtige Verknüpfungen
A B INNER-Join
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Wichtige Verknüpfungen
A B INNER-Join
A B LEFT-Join
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Wichtige Verknüpfungen
A B INNER-Join
A B LEFT-Join
A B FULL-Join
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Kombination mit Daten
/*Umkodieren von Daten in ICD9 in ICD10 mithilfe der DB*/PROC
SQL;
CREATE
UNIQUE
INDEX
_id
ON
mortality_ICD9 (_id);CREATE
TABLE
results
AS
SELECT
B.*, U.code10, I10.titel10FROM
mortality_ICD9 AS
B LEFT JOIN
(Umsteiger AS
U INNER
JOIN
ICD10 AS
I ON
U.code10=I.code10) ON B.cause=U.code9
quit;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Kombination mit Daten/*Umkodieren von Daten in ICD9 in ICD10 mithilfe der DB*/PROC
SQL;
CREATE
UNIQUE
INDEX
_id
ON
mortality_ICD9 (_id);CREATE
TABLE
results
AS
SELECT
B.*, U.code10, I.titel10FROM
mortality_ICD9 AS
B LEFT JOIN
(Umsteiger AS
U INNER
JOIN
ICD10 AS
I ON
U.code10=I.code10) ON B.cause=U.code9
quit;
Pat_ID Code9 Code10 Titel10 …1 573.3 K75.2 Unspez. reaktive Hepatitis …1 573.3 K75.3 Granulomatöse Hepatitis …4 571.5 K76.1 Chronische Stauungsleber …8 5999 …
15 573.8 K76.1 Chronische Stauungsleber …
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Bereinigen der ErgebnisseZu manchen ICD9-Codes gibt es mehrere ICD10-Einträge, da der ICD10 differenzierter ist!
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Bereinigen der Ergebnisse
/*Filtern der multiplen ICD10-Einträge*/PROC
SQL;
CREATE
TABLE
multiple_results
ASSELECT
* FROM
results
WHERE
_id
IN
(SELECT
_id
FROM
results
GROUP
BY
_idHAVING
count(_id
> 1))
quit;
Über den vorher generierten Index können nun die mehrdeutigen Zuordnungen selektiert werden
Zu manchen ICD9-Codes gibt es mehrere ICD10-Einträge, da der ICD10 differenzierter ist!
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Bereinigen der Ergebnisse
Je nach Tiefe der ICD10-Auswertung nur die ICD10-Obergruppe bzw. aus multiplen ICD10 den passenden Code auswählen.
/*Filtern der multiplen ICD10-Einträge*/PROC
SQL;
CREATE
TABLE
multiple_results
ASSELECT
* FROM
results
WHERE
_id
IN
(SELECT
_id
FROM
results
GROUP
BY
_idHAVING
count(_id
> 1))
quit;
Über den vorher generierten Index können nun in gleichen Daten- sätzen relativ einfach dieselben ICD-Codes selektiert werden.
Zu manchen ICD9-Codes gibt es mehrere ICD10-Einträge, da der ICD10 differenzierter ist!
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Löschen der Datenbank/*Anzeigen der Integritätsbedingungen in einer Tabelle:*/PROC SQL;
DESCRIBE TABLE
CONSTRAINTS
Umsteiger;quit;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Löschen der Datenbank
/*Löschen von mit Integritätsbedingungen verknüpften Tabellen; Fremdschlüssel müssen zuerst gelöscht werden!*/PROC SQL;
ALTER TABLE
UmsteigerDROP
CONSTRAINT
UICD10, UICD9;
ALTER
TABLE
ICD9DROP
CONSTRAINT
Code9X;
ALTER
TABLE
ICD10DROP
CONSTRAINT
Code10X;
DROP
TABLE
ICD9, ICD10, Umsteiger;quit;
/*Anzeigen der Integritätsbedingungen in einer Tabelle:*/PROC SQL;
DESCRIBE TABLE
CONSTRAINTS
Umsteiger;quit;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
3. Find x.
Links zu ICD9-ICD10
Homepage des Deutschen Instituts für Medizinsiche Dokumentation und Information (DIMDI): www.dimdi.de
ICD9-ICD10-Überleitungstabelle von 2001: www.dimdi.de/dynamic/de/ klassi/downloadcenter/icd-10-who/vorgaenger/version10/ueberleitung/(neuere Versionen sind kostenpflichtig!)
Tipps & Tricks: Anwendung von (Perl) Regular
Expressions für die Mustersuche in Strings
Tipps & Tricks:Tipps & Tricks: Anwendung von (Perl) Anwendung von (Perl) RegularRegular
ExpressionsExpressions ffüür die Mustersuche in Stringsr die Mustersuche in Strings
Andreas Deckert
Institute of Public Health, Universität Heidelberg
Andreas Deckert
Institute of Public Health, Universität Heidelberg
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Einfache Problemstellung Beispiel: $ soll aus “Dies ist ein Bei$spiel” entfernt werden
Lösungsmöglichkeit in SAS:DATA
Beispiel;
text = "Dies ist ein Bei$spiel";pos
= index(text,"$");l_total
= length(text);l_part
= l_total
-
pos;_text = substr(text,1,pos-1)||substr(text,pos+1,l_part);
RUN;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Einfache Problemstellung Beispiel: $ soll aus “Dies ist ein Bei$spiel” entfernt werden
Lösungsmöglichkeit in SAS:DATA
Beispiel;
text = "Dies ist ein Bei$spiel";pos
= index(text,"$");l_total
= length(text);l_part
= l_total
-
pos;_text = substr(text,1,pos-1)||substr(text,pos+1,l_part);
RUN;
DATA
Beispiel;LENGTH
_text $ 25;text = "Dies ist ein Bei$spiel";rx
= rxparse("'$' to ''");CALL
rxchange(rx,1,text,_text);RUN;
Lösung mit “Regular Expressions”:
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
(Perl) Regular Expressions?
Begriff aus der (theoretischen) Informatik
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
(Perl) Regular Expressions?
Begriff aus der (theoretischen) Informatik
“[…] Zeichenkette die der Beschreibung einer Menge bzw. Unter- mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient.” (wikipedia)
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
(Perl) Regular Expressions?
Begriff aus der (theoretischen) Informatik
“[…] Zeichenkette die der Beschreibung einer Menge bzw. Unter- mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient.” (wikipedia)
Filter für den Abgleich von Texten mit bestimmten Mustern
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
(Perl) Regular Expressions?
Begriff aus der (theoretischen) Informatik
“[…] Zeichenkette die der Beschreibung einer Menge bzw. Unter- mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient.” (wikipedia)
Filter für den Abgleich von Texten mit bestimmten Mustern
Vorgegebenes Alphabet; Operationen
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
(Perl) Regular Expressions?
Begriff aus der (theoretischen) Informatik
“[…] Zeichenkette die der Beschreibung einer Menge bzw. Unter- mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient.” (wikipedia)
Filter für den Abgleich von Texten mit bestimmten Mustern
Vorgegebenes Alphabet; Operationen
Perl Regular Expressions: Syntax der Programmiersprache Perl
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Perl Regular Expressions … Lösung mit Perl regular expressions:
DATA
Beispiel;LENGTH
_text $ 25;text = "Dies ist ein Bei$spiel";pattern
= prxparse('s/\$//');CALL
prxchange(pattern,-1,text,_text);RUN;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Perl Regular Expressions … Lösung mit Perl regular expressions:
DATA
Beispiel;LENGTH
_text $ 25;text = "Dies ist ein Bei$spiel";pattern
= prxparse('s/\$//');CALL
prxchange(pattern,-1,text,_text);RUN;
DATA
Beispiel;text = "Dies ist ein Bei$spiel";text = prxchange('s/\$//',-1,text);
RUN;
Kurzversion:
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Perl Regular Expressions … Lösung mit Perl regular expressions:
DATA
Beispiel;LENGTH
_text $ 25;text = "Dies ist ein Bei$spiel";pattern
= prxparse('s/\$//');CALL
prxchange(pattern,-1,text,_text);RUN;
DATA
Beispiel;text = "Dies ist ein Bei$spiel";text = prxchange('s/\$//',-1,text);
RUN;
Kurzversion:
Damit “Di$es is$$t ein Bei$spiel” ebenfalls problemlos handhabbar!
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Steuerzeichen (Auszug)
Muster Bedeutung/ Beginn und Ende der Regular Expression\w Abgleichen von Buchstaben\d Abgleichen von Ziffern? Falls nicht oder 1x vorhanden+ Falls 1x oder beliebig oft vorhanden* Falls nicht oder beliebig oft vorhanden(Muster) Gruppierung und Speicherung$1 Abruf des ersten Speichereintragess/Muster/Ausgabe/ Einsetzen bzw. Ersetzen von Textteilen
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
NameBauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
$1: Schmidt
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
$1: Schmidt
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
$1: Schmidt
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
$1: Schmidt
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
$1: Schmidt
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
$1: Schmidt
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
$1: Schmidt
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
$1: Schmidt $2: Hans-Peter
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Komplexe Problemstellung
?Name
Bauer, Peter
Sailer, Karl-Heinz
Müller, Eva Maria
Schmidt, Hans-Peter Matthias
_NamePeter Bauer
Karl-Heinz Sailer
Eva Müller
Hans-Peter Schmidt
Geforderte Transformation: ErsterVorname Nachname
Frau Dr. Weber, Karin
Prof. Dr. Stern, Anton Richard
Karin Weber
Anton Stern
DATA
Namen; SET
Namen;pattern
= prxparse("s/(\w+), +(\w+-?\w+)/$2 $1/");call
prxsubstr(pattern, Name, Position, Laenge);match
= substr(Name,Position,Laenge);_Name = prxchange(pattern,-1,match);
RUN;
$1: Schmidt $2: Hans-Peter
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Anwendungen
Datenvalidierung
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Anwendungen
Datenvalidierung
Textmuster suchen
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Anwendungen
Datenvalidierung
Textteile ersetzen
Textmuster suchen
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Anwendungen
Datenvalidierung
Textteile ersetzen
Textmuster suchen
Datenextraktion in Freitexten
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Anwendungen
Datenvalidierung
Textteile ersetzen
Textmuster suchen
Datenextraktion in Freitexten
Bearbeitung von Textvariablen mit langem ungeordneten Inhalten
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Vielen Dank für Ihre Aufmerksamkeit!
Vielen Dank für Ihre Aufmerksamkeit!
http://www2.sas.com/proceedings/sugi29/265-29.pdf
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Weiteres komplexes Beispieltext
Landratsamt Altötting
Telefon 08671-502-665
Gesundheitsamt Amberg
Hockermühlstr. 53
Tel 08621-39-399
Landratsamt Hof
Fax.: 09281-16873
Tel.: 09281-16-0
Gesundheitsamt Hamburg
21029 Hamburg
Tel.: 042891-2216
Fax.: 042891-2200
Stadt Ingolstadt
Telefon: 0841-3051-460
85049 Ingolstadt
Adress-Datensatz
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Weiteres komplexes Beispieltext
Landratsamt Altötting
Telefon 08671-502-665
Gesundheitsamt Amberg
Hockermühlstr. 53
Tel 08621-39-399
Landratsamt Hof
Fax.: 09281-16873
Tel.: 09281-16-0
Gesundheitsamt Hamburg
21029 Hamburg
Tel.: 042891-2216
Fax.: 042891-2200
Stadt Ingolstadt
Telefon: 0841-3051-460
85049 Ingolstadt
Keine Ordnung erkennbar
Adress-Datensatz
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Weiteres komplexes Beispieltext
Landratsamt Altötting
Telefon 08671-502-665
Gesundheitsamt Amberg
Hockermühlstr. 53
Tel 08621-39-399
Landratsamt Hof
Fax.: 09281-16873
Tel.: 09281-16-0
Gesundheitsamt Hamburg
21029 Hamburg
Tel.: 042891-2216
Fax.: 042891-2200
Stadt Ingolstadt
Telefon: 0841-3051-460
85049 Ingolstadt
Keine Ordnung erkennbar
Adress-Datensatz
Gesucht: Telefonnummern
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Weiteres komplexes Beispieltext
Landratsamt Altötting
Telefon 08671-502-665
Gesundheitsamt Amberg
Hockermühlstr. 53
Tel 08621-39-399
Landratsamt Hof
Fax.: 09281-16873
Tel.: 09281-16-0
Gesundheitsamt Hamburg
21029 Hamburg
Tel.: 042891-2216
Fax.: 042891-2200
Stadt Ingolstadt
Telefon: 0841-3051-460
85049 Ingolstadt
Keine Ordnung erkennbar
Adress-Datensatz
Gesucht: Telefonnummern
Beschränkung: Vorwahl 08-09
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Weiteres komplexes Beispieltext
Landratsamt Altötting
Telefon 08671-502-665
Gesundheitsamt Amberg
Hockermühlstr. 53
Tel 08621-39-399
Landratsamt Hof
Fax.: 09281-16873
Tel.: 09281-16-0
Gesundheitsamt Hamburg
21029 Hamburg
Tel.: 042891-2216
Fax.: 042891-2200
Stadt Ingolstadt
Telefon: 0841-3051-460
85049 Ingolstadt
Keine Ordnung erkennbar
Adress-Datensatz
Gesucht: Telefonnummern
Beschränkung: Vorwahl 08-09
Machbar mit Standard-Code?
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Weiteres komplexes Beispieltext
Landratsamt Altötting
Telefon 08671-502-665
Gesundheitsamt Amberg
Hockermühlstr. 53
Tel 08621-39-399
Landratsamt Hof
Fax.: 09281-16873
Tel.: 09281-16-0
Gesundheitsamt Hamburg
21029 Hamburg
Tel.: 042891-2216
Fax.: 042891-2200
Stadt Ingolstadt
Telefon: 0841-3051-460
85049 Ingolstadt
Keine Ordnung erkennbar
Adress-Datensatz
Gesucht: Telefonnummern
Beschränkung: Vorwahl 08-09
Machbar mit Standard-Code?
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Weiteres komplexes Beispieltext
Landratsamt Altötting
Telefon 08671-502-665
Gesundheitsamt Amberg
Hockermühlstr. 53
Tel 08621-39-399
Landratsamt Hof
Fax.: 09281-16873
Tel.: 09281-16-0
Gesundheitsamt Hamburg
21029 Hamburg
Tel.: 042891-2216
Fax.: 042891-2200
Stadt Ingolstadt
Telefon: 0841-3051-460
85049 Ingolstadt
Keine Ordnung erkennbar
Adress-Datensatz
Gesucht: Telefonnummern
Beschränkung: Vorwahl 08-09
Machbar mit Standard-Code?
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Lösung mit Perl reg. expressions
DATA
Ergebnis; SET
Liste;_Telefon = "s/[Tel]\w+\.*:* +([0][6-9]\d\d\d-\d+)/Tel.: $1/";pattern
= prxparse(_Telefon);IF
prxmatch(pattern,text) THEN
DO;Ergebnis = prxchange(pattern,-1,text);
END;RUN;
01.03.2011 Andreas Deckert, Institute of Public Health Heidelberg
Ergebnistext Ergebnis
Landratsamt Altötting
Telefon 08671-502-665 Tel.: 08671-502-665
Gesundheitsamt Amberg
Hockermühlstr. 53
Tel 08621-39-399 Tel.: 08621-39-399
Landratsamt Hof
Fax.: 09281-16873
Tel.: 09281-16-0 Tel.: 09281-16-0
Gesundheitsamt Hamburg
21029 Hamburg
Tel.: 042891-2216
Fax.: 042891-2200
Stadt Ingolstadt
Tel.: 0841-3051-460 Tel.: 0841-3051-460
85049 Ingolstadt