SAS9

MISSOVER vs TRUNCOVER, el partido final

Simon 11 vistas

Al importar archivos de texto sin formato (mediante DATA STEP e INFILE), a menudo sucede que las líneas no tienen todas la misma longitud. Por defecto, SAS© tiene un comportamiento peligroso: si no puede leer una variable hasta el final, salta a la siguiente línea para continuar (opción FLOWOVER).

Para evitar esto, existen dos opciones: MISSOVER y TRUNCOVER. Muchos piensan que son intercambiables. Sin embargo, existe una diferencia crítica que puede distorsionar sus datos.

1. El Escenario del Colapso

Imagine que le pide a SAS© que lea 5 caracteres a partir de la posición 18. INPUT @articles_translated/article_18_es.json code $5.;

Pero su línea de datos es más corta de lo esperado: termina en la posición 20.

  • SAS© necesita las posiciones: 18, 19, 20, 21, 22.

  • El archivo contiene: 18, 19, 20 (fin de línea).

Por lo tanto, faltan 2 caracteres para satisfacer la solicitud. Aquí es donde la elección de la opción lo cambia todo.

2. MISSOVER: "Todo o Nada"

La opción MISSOVER (Missing Over) es estricta. Si SAS© no encuentra la totalidad de los caracteres solicitados por el formato, considera que la lectura es imposible para esta variable.

  • Comportamiento: "Me prometiste 5 caracteres, solo veo 3. No tomo nada."

  • Resultado: La variable se establece en valor faltante (Missing).

  • Riesgo: Pierde la información parcial presente al final de la línea (los caracteres 18, 19 y 20 son ignorados).

3. TRUNCOVER: "Toma lo que haya"

La opción TRUNCOVER (Truncated Over) es flexible. Si la línea termina antes del final del formato, SAS© recupera todo lo que encuentra hasta el salto de línea.

  • Comportamiento: "Quería 5 caracteres, ¿solo tienes 3? No importa, dame los 3."

  • Resultado: La variable contiene el valor parcial (los caracteres en las posiciones 18-20).

  • Ventaja: No se pierde ningún dato.

4. Ejemplo Comparativo

Código SAS©:

1DATA test;
2 INFILE DATALINES missover; /* Testez ensuite avec truncover */
3 INPUT @articles_translated/article_21_es.json nom $5.;
4 DATALINES;
5ABCDE
6ABC
7;
8RUN;
Dato bruto (Línea)Longitud realOpción MISSOVEROpción TRUNCOVER
ABCDE5"ABCDE""ABCDE"
ABC3(Vacío)"ABC"
Análisis del experto: TRUNCOVER maneja los "datos parciales". MISSOVER se rinde si la longitud es insuficiente. Si la línea fuera aún más corta (ej: parada en la posición 16 cuando se empieza a leer en 18), ambas opciones devolverían un valor faltante.

5. ¿Por qué esta confusión histórica?

  • En los viejos Mainframes, los archivos a menudo tenían longitudes fijas y rígidas. Las líneas incompletas eran raras.

  • En Windows y Unix, los archivos son de longitud variable (delimitados por retornos de carro). Es muy frecuente que una línea sea más corta que las otras (ej: dirección vacía al final de la línea).

La recomendación moderna es clara: Casi siempre use TRUNCOVER.

Es la opción más segura para leer archivos de longitud variable (CSV complejos, archivos planos posicionales) sin riesgo de perder datos ubicados al final de la línea. MISSOVER solo debe usarse si tiene una razón específica para rechazar datos parciales.