Endlich richtig sortieren mit der Option Sortseq der Prozedur SORT
Von Carina Ortseifen: Carina Ortseifen, Grischa Pfister, Heribert Ramroth, Marianne Weires: Tipps und Tricks für den leichteren Umgang mit der SAS Software, KSFE 2009
Das Sortieren von Tabellen sollte eigentlich ein leichtes sein und zu den grundlegenden Tugenden einer analytischen Software gehören. Doch im Zuge einer immer globaler werdenden Welt, in der man nicht nur mit der englischen, sondern auch mit Deutsch, Schwedisch, Japanisch und Chinesisch zu tun hat, um nur ein paar der vorkommenden Sprachen zu nennen, wird schnell klar, dass Sortieren vielleicht doch nicht so einfach ist.
Wir wollen folgende Begriffe alphabetisch sortieren: Esel eins essen dass daß älter USA und übung Übung alt 0123 123 aelt ub Alter
Dazu lesen wir diese in eine SAS-Tabelle szene ein und sortieren nach der Variable stichwort:
Proc Sort Data=szene Out=test; By Stichwort; Run;
Und erhalten die folgende Liste:
Obs | stichwort |
1 | 0123 |
2 | 123 |
3 | Alter |
4 | Esel |
5 | USA |
6 | aelt |
7 | alt |
8 | dass |
9 | daß |
10 | eins |
11 | essen |
12 | ub |
13 | und |
14 | Übung |
15 | älter |
16 | übung |
Nach den Ziffern 0, 1 usw. erscheinen die mit Großbuchstaben beginnenden Worte von A bis U, dann die mit Kleinbuchstaben beginnenden und schließlich die mit einem Umlaut beginnenden Buchstaben. Sehr schön und eindeutig, aber für uns Deutsche eher unbrauchbar.
Mit SAS 9.2 gibt es die neue Option SORTSEQ=LINGUISTIC, welche ein linguistisches Sortieren erlaubt. Und die Suboption COLLATION=PHONEBOOK passt genau auf die Bedürfnisse der Deutschen, die Worte analog zum Telefonbuch zu sortieren. D.h. Klein- und Großbuchstaben-Wörter sind nicht strikt getrennt und ä wird aufgelöst in ae und zwischen ad und af einsortiert.
Das erweiterte Programm hat dann folgende Form:
proc sort data=szene out=test Sortseq=Linguistic(collation=phonebook);; by stichwort; run;
und liefert folgendes Ergebnis:
Obs | stichwort |
1 | 0123 |
2 | 123 |
3 | aelt |
4 | älter |
5 | alt |
6 | Alter |
7 | dass |
8 | daß |
9 | eins |
10 | Esel |
11 | essen |
12 | ub |
13 | übung |
14 | Übung |
15 | und |
16 | USA |
Eine weitere schöne Suboption ist NUMERIC_COLLATION=ON, womit Hausnummern von Straßennamen und andere Zahlen innerhalb von Textwerten korrekt sortiert werden können:
data liste; input name $ 1-20; datalines; X-Weg 2 X-Weg 120 X-Weg 10 ; proc sort data=liste out=test sortseq=linguistic(collation=phonebook numeric_collation=on); by name; run;
Mit dem Ergebnis:
obs | name |
1 | X-Weg 2 |
2 | X-Weg 10 |
3 | X-Weg 120 |
Obs name
Literatur
- Base SAS 9.2 Procedures Guide, Hilfe zu Proc Sort in der Online-Version.
- Linguistic Collation: Everyone Can Get What They Expect. Sensible Sorting for Global Business Success. SAS Technical Paper (PDF, 443 kB).