Archivo de la etiqueta: DATA

Los 10 errores y warnings más habituales en SAS

En función de los contactos con SAS support han elaborado un ranking de errores y warnings reportados a SAS con respecto al paso DATA. En este enlace tenéis el ranking, a los comentarios de Kim Wilson podéis añadir los míos. Veamos uno por uno esos errores:

  1. ERROR: AN INTERNAL ERROR HAS OCCURRED WHILE READING A COMPRESSED FILE. PLEASE CALL YOUR SAS SITE REPRESENTATIVE AND REPORT THE FOLLOWING…
    Tenéis que reparar el dataset como indica Kim, pero mucho ojo con mover datasets entre servidores o con trabajar con distintas versiones de SAS.
  2. ERROR: ARRAY SUBSCRIPT OUT OF RANGE AT LINE N AND COLUMN N
    Nos hemos ido de rango en el array sucede cuando recorremos los arrays con un bucle DO y el índice del bucle es mayor que el tamaño del array. Para evitarnos líos podemos hacer ARRAY AR(*) ; DO i = 1 TO DIM(AR); Que no se lleve nadie las manos a la cabeza.
  3. ERROR: THE FORMAT $NAME WAS NOT FOUND OR COULD NOT BE LOADED
    Llamamos a un  formato que no existe, muy habitual en input o put.
  4. NOTE: THE MEANING OF AN IDENTIFIER AFTER A QUOTED STRING MAY CHANGE IN A FUTURE SAS RELEASE. INSERTING WHITE SPACE BETWEEN A QUOTED STRING AND THE SUCCEEDING IDENTIFIER IS RECOMMENDED.
    Esto no pasa...
  5. NOTE: INVALID ARGUMENT TO FUNCTION INPUT AT LINE N COLUMN N
    En ocasiones el formato que ponemos en input es incorrecto y se produce este error, habitual cuando trabajamos con fechas
  6. NOTE: MERGE STATEMENT HAS MORE THAN ONE DATA SET WITH REPEATS OF BY VALUES
    Cuando hacemos un merge si uno de los conjuntos de datos tiene observaciones duplicadas por la variable que ponemos en BY obtenemos este WARNING, cuando cruzamos tablas SAS hemos de tener mucho cuidado con las observaciones duplicadas.
  7. NOTE: SAS WENT TO A NEW LINE WHEN INPUT STATEMENT REACHED PAST THE END OF A LINE
    No es muy habitual este error. Tenemos que realizar lo que nos dice Kim. La opción FLOWOVER no la he empleado nunca, en este link tenéis ejemplos de esta problemática.
  8. NOTE: INVALID DATA FOR VARIABLE-NAME AT LINE N
    Si definimos una variable de un tipo no podemos emplear datos de otro tipo, es decir, si la variable es numérica no la igualéis a un caracter y viceversa. Tenedlo en cuenta.
  9. WARNING: THE QUOTED STRING CURRENTLY BEING PROCESSED HAS BECOME MORE THAN 262 CHARACTERS LONG. YOU MAY HAVE UNBALANCED QUOTATION MARKS.
    Otro problema poco habitual, seguid haciendo caso a Kim.
  10. WARNING: MULTIPLE LENGTHS WERE SPECIFIED FOR THE VARAIBLE VARIABLE-NAME BY INPUT DATA SET(S). THIS MAY CAUSE TRUNCATION OF DATA.
    Este warning es muy típico cuando realizamos merge con variables alfanuméricas. Imaginemos que un dataset tiene la variable póliza definida como $10. y otro tiene la variable póliza definida como $12. si realizamos un merge por esa variable obtendremos este WARNING.

Estos son los errores que más aparecen en SAS SUPPORT. En mi opinión hay algunos que no son habituales pero hay algunos que son dudas recurrentes que me llegan. Al final lo que siempre plantea problemas son los formatos y las fechas en SAS, el 80% de las dudas que me llegan van por ahí. Espero complementar el mensaje de SAS.

Curso de lenguaje SAS con WPS. Lectura de ficheros de texto

Leer ficheros de texto con lenguaje SAS no es sencillo debido a la escasa flexibilidad de SAS.  La cosa se complica cuando leemos texto con WPS. Empleando el asistente de SAS y haciendo recall podemos leer ficheros con bastante comodidad. Eso no lo podemos hacer con WPS porque no dispone de asistente ni nada parecido al EFI de SAS. Así que tenemos que tantear con INPUT hasta conseguir leer el fichero correctamente. Pero esta entrada nos permite conocer mejor como funciona el paso DATA. Más adelante veremos como hacerlo con el PROC IMPORT. El primer ejemplo importa un fichero de texto de este tipo:

1 ,479.70055858 ,760.70972521 ,198.59444871 ,75.189163012 ,372.82062293 ,
2 ,754.21879802 ,343.8333852 ,253.53378256 ,398.35220966 ,532.53241281 ,
3 ,554.54856463 ,190.96417175 ,827.15448683 ,537.47661437 ,656.19086086 ,
4 ,377.5517132 ,180.89431253 ,519.43704743 ,814.11889932 ,812.06014837 ,

No tiene cabeceras está delimitado por comas, tiene 6 variables: id, importe1,.., importe5. Conocemos la estructura, el delimitador y las variables:


data importes;
infile "D:\raul\wordpress\curso sas\muestra1.txt" dlm=',';
input id importe1 importe2 importe3 importe4 importe5;
run;

Si estuviera delimitado por tabuladores trabajamos con dlm:


data importes;
infile "D:\raul\wordpress\curso sas\muestra2.txt" dlm='09'x;
input id importe1 importe2 importe3 importe4 importe5;
run;

Es el ejemplo más sencillo DATA genera un dataset que lee de un INFILE y con INPUT creamos un vector de variables que en la terminología de SAS se denomina PDV. Sigue leyendo Curso de lenguaje SAS con WPS. Lectura de ficheros de texto

Curso de lenguaje SAS con WPS. El paso DATA

El elemento estrella del código SAS es el paso DATA. Con data podemos leer y escribir conjuntos de datos SAS. Un conjunto de datos SAS es una tabla de datos que contiene información sobre las variables y los registros de la tabla. Data lo que hace es crear una estructura para la tabla y posteriormente añadir datos a esta estructura, es un bucle, no necesitamos indicarle al sistema como recorrer la tabla. En WPS ejecutaremos nuestras sentencias en el editor a través de scripts sobre los que podemos navegar en el Proyect Explorer. La sintaxis de un paso data es imposible resumirla pero se puede estructurar del siguiente modo:

  1. DATA <nombre conjunto de datos SAS> ; Crea 1 o n  conjuntos de datos SAS
  2.  Sentencias de lectura: SET MERGE INFILE CARDS DATALINES...;
  3. Sentencias de manipulación de registros o variables;
  4. RUN;

Lo primero que hace DATA es crear una estructura en función de los datos de lectura. Una vez creada esa estructura lee los datos de forma iterativa y cuando llega a RUN se vuelcan los datos a la estructura. Los primeros ejemplos que vamos a analizar son Sigue leyendo Curso de lenguaje SAS con WPS. El paso DATA