SAS9

MISSOVER vs. TRUNCOVER: Das finale Duell

Simon 9 Aufrufe

Beim Importieren von Rohtextdateien (über DATA STEP und INFILE) kommt es häufig vor, dass die Zeilen nicht alle die gleiche Länge haben. Standardmäßig verhält sich SAS© gefährlich: Wenn es eine Variable nicht vollständig lesen kann, springt es zur nächsten Zeile, um fortzufahren (Option FLOWOVER).

Um dies zu verhindern, gibt es zwei Optionen: MISSOVER und TRUNCOVER. Viele denken, sie seien austauschbar. Es gibt jedoch einen entscheidenden Unterschied, der Ihre Daten verfälschen kann.

1. Das Crash-Szenario

Stellen Sie sich vor, Sie bitten SAS©, 5 Zeichen ab Position 18 zu lesen. INPUT @articles_translated/article_18_de.json code $5.;

Aber Ihre Datenzeile ist kürzer als erwartet: Sie endet bei Position 20.

  • SAS© benötigt die Positionen: 18, 19, 20, 21, 22.

  • Die Datei enthält: 18, 19, 20 (Zeilenende).

Es fehlen also 2 Zeichen, um die Anforderung zu erfüllen. Hier ändert die Wahl der Option alles.

2. MISSOVER: "Alles oder Nichts"

Die Option MISSOVER (Missing Over) ist streng. Wenn SAS© nicht alle vom Format angeforderten Zeichen findet, betrachtet es das Lesen dieser Variablen als unmöglich.

  • Verhalten: "Du hast mir 5 Zeichen versprochen, ich sehe nur 3. Ich nehme nichts."

  • Ergebnis: Die Variable erhält einen fehlenden Wert (Missing).

  • Risiko: Sie verlieren die teilweise vorhandenen Informationen am Zeilenende (die Zeichen 18, 19 und 20 werden ignoriert).

3. TRUNCOVER: "Nimm, was da ist"

Die Option TRUNCOVER (Truncated Over) ist flexibel. Wenn die Zeile vor dem Ende des Formats endet, nimmt SAS© alles, was es bis zum Zeilenumbruch findet.

  • Verhalten: "Ich wollte 5 Zeichen, du hast nur 3? Egal, gib mir die 3."

  • Ergebnis: Die Variable enthält den teilweisen Wert (die Zeichen an den Positionen 18-20).

  • Vorteil: Es gehen keine Daten verloren.

4. Vergleichsbeispiel

SAS©-Code:

1DATA test;
2 INFILE DATALINES missover; /* Testez ensuite avec truncover */
3 INPUT @articles_translated/article_21_de.json nom $5.;
4 DATALINES;
5ABCDE
6ABC
7;
8RUN;
Rohdaten (Zeile)Tatsächliche LängeOption MISSOVEROption TRUNCOVER
ABCDE5"ABCDE""ABCDE"
ABC3(Leer)"ABC"
Expertenanalyse: TRUNCOVER behandelt "Teildaten". MISSOVER gibt auf, wenn die Länge unzureichend ist. Wäre die Zeile noch kürzer (z.B. Ende bei Position 16, obwohl wir bei 18 zu lesen beginnen), würden beide Optionen einen fehlenden Wert zurückgeben.

5. Warum diese historische Verwirrung?

  • Auf alten Mainframes hatten Dateien oft feste, starre Längen. Unvollständige Zeilen waren selten.

  • Unter Windows und Unix haben Dateien variable Längen (durch Zeilenumbrüche getrennt). Es ist sehr häufig, dass eine Zeile kürzer ist als andere (z.B. leere Adresse am Zeilenende).

Die moderne Empfehlung ist eindeutig: Verwenden Sie fast immer TRUNCOVER.

Dies ist die sicherste Option, um Dateien mit variabler Länge (komplexe CSV, positionale Flatfiles) zu lesen, ohne das Risiko einzugehen, Daten am Zeilenende zu verlieren. MISSOVER sollte nur verwendet werden, wenn Sie einen spezifischen Grund haben, Teildaten abzulehnen.