SAS9

¿Cómo probar eficazmente un valor faltante en una macro variable SAS?

Simon 6 views

Una de las confusiones más frecuentes al aprender el lenguaje Macro SAS© reside en la gestión de los valores faltantes. A diferencia del paso Data, donde un punto (.) representa un valor numérico faltante, el procesador de macros trata todo como texto.

Este artículo explica cómo distinguir una macro variable vacía (nula) de una macro variable que contiene un punto, y cómo realizar estas pruebas correctamente.

¿Cómo probar eficazmente un valor faltante en una macro variable SAS? -

La trampa común: el punto (.) vs. el vacío

Es crucial comprender la naturaleza de su variable:

  1. Macro variable vacía (Nula): No contiene ningún carácter.

    • Ejemplo: %let maVar = ;

  2. Macro variable que contiene un punto: Contiene el carácter ".". Para el procesador de macros, es una cadena de caracteres de longitud 1, no un valor faltante.

    • Ejemplo: %let maVar = .;

Si prueba %if &maVar = ., está verificando literalmente si la variable contiene el carácter "punto", y no si está vacía.

Método 1: Usar la función %LENGTH (Recomendado)

El método más robusto para verificar si una macro variable está "vacía" o "nula" es probar su longitud.

Para verificar si una variable está vacía:

1%IF %LENGTH(&maVar) = 0 %THEN %DO;
2 
3%put La variable est vide.;
4 
5%END;
6 

Para verificar si una variable contiene un valor (no vacía):

Esta sintaxis funciona porque en SAS©, cualquier número diferente de 0 se evalúa como "Verdadero" (True).

1%IF %LENGTH(&maVar) %THEN %DO;
2 
3%put La variable contient quelque chose (longueur > 0).;
4 
5%END;
6 
Atención: Si %let a = .;, entonces %length(&a) es 1. Por lo tanto, la prueba anterior considerará que la variable no está vacía.

Método 2: La comparación directa

Otro método común es comparar la variable con una cadena vacía.

1%IF &maVar = %THEN %DO;
2 
3%put La variable est vide.;
4 
5%END;
6 
Nota: Este método a veces es menos legible que usar %length, pero es funcional.

Errores de sintaxis frecuentes que se deben evitar

Al escribir estas condiciones, preste atención a la estructura de sus bloques %if / %then / %else.

El error del punto y coma después de %else

Un error clásico es colocar un punto y coma inmediatamente después de %else, lo que termina la instrucción prematuramente.

Note :
Incorrecto:
1/* Le point-virgule après %else empêche l'exécution du bloc suivant */
2%IF %LENGTH(&a) %THEN %DO;
3 %put Existe;
4%END;
5%ELSE;
6 %put N'existe pas;
Note :
Correcto:
1%IF %LENGTH(&a) %THEN %DO;
2 %put Existe;
3%END;
4%ELSE %DO;
5 %put N'existe pas;
6%END;
  • El lenguaje de macros manipula texto.

  • Un punto (.) es un carácter, no un valor faltante en el sentido de macro.

  • Utilice %if %length(&var) = 0 para probar un valor nulo (vacío).

  • Para profundizar en el tema de los valores faltantes y lógicos en las macros, los trabajos de Chung y King sobre el tema son referencias técnicas sólidas.