Excel-Dateien lesen mal anders - über XML
Manchmal sind Excel-Dateien nicht sehr leicht als Tabellen mit einheitlichen Spalten zu interpretieren, zum Beispiel können in einer Spalte unterschiedliche Datentypen stehen. Oder man möchte nicht nur die Inhalte der Zellen, sondern auch Zellkommentare lesen. Dann sind die verfügbaren Verfahren für das Importieren von Excel-Dateien nach SAS nicht ohne weiteres anwendbar.
Da man Excel-Dateien auch im XML-Format speichern kann und da SAS in der Lage ist, das XML-Format zu lesen, besteht die Möglichkeit, sehr flexibel auf verschiedenste Eigenschaften von Excel-Dateien zuzugreifen.
Dieses Verfahren habe ich mit Excel 2003 und SAS 9.1.3 entwickelt. Inwieweit es auf andere Versionen übertragbar ist, wäre noch zu prüfen.

Wenn man obige Excel-Tabelle als XML-Datei abspeichert (Dateityp XML-Kalkulationstabelle) und diese mit dem anhängenden SAS-Programm einliest, erhält man eine SAS-Datei, die einen Datensatz pro Zelle der Excel-Datei enthält, siehe folgende Tabelle. (Wer es selbst probieren möchte: die erste %LET-Anweisung anpassen).
| Beob. | SheetName | DataType | RowId | ColumnId | ColumnAlpha | data | comment |
|---|---|---|---|---|---|---|---|
| 1 | Tabelle3 | String | 3 | 2 | B | Eins | |
| 2 | Tabelle3 | Number | 3 | 3 | C | 5 | |
| 3 | Tabelle3 | String | 4 | 2 | B | Zwei | |
| 4 | Tabelle3 | Number | 4 | 3 | C | 6 | |
| 5 | Tabelle3 | String | 5 | 2 | B | Drei | Hier steht die Zahl drei |
| 6 | Tabelle3 | Number | 5 | 3 | C | 7.1 | |
| 7 | Tabelle3 | String | 6 | 2 | B | Vier | |
| 8 | Tabelle3 | Number | 6 | 3 | C | 8.1 | |
| 9 | Tabelle3 | DateTime | 7 | 3 | C | 1899-12-31T12:15:00.000 | |
| 10 | Tabelle3 | DateTime | 8 | 3 | C | 2007-01-01T00:00:00.000 |
Das Verfahren funktioniert auch mit sehr großen Excel-Dateien (viele Blätter und mehrere 10.000 Zellen). Leider hat das Verfahren aber noch ein Problem: Wenn Zellen oder Kommentare formatiert sind (Farben, Schriftgrößen etc.), dann stehen in der XML-Datei entsprechende HTML-Tags. Das konnte ich der XML-Libname-Engine noch nicht beibringen, sie liefert dann leere Zellen.
