Publicado el :
ETL CREATION_INTERNE

Ejemplos de manejo de delimitadores con INPUT e INFILE

Este código también está disponible en: Deutsch English Français
En espera de validación
El script presenta 7 casos de uso para la importación de datos textuales: lectura estándar CSV con la opción DSD, uso del modificador tilde (~) para la gestión avanzada de comillas, definición explícita de longitudes, uso de varios delimitadores simultáneos, definición del delimitador a través de una variable, lectura dinámica del delimitador desde los propios datos, y uso de una cadena de caracteres completa como separador (DLMSTR).
Análisis de datos

Type : CREATION_INTERNE


Los datos se incluyen directamente en el código a través de las instrucciones DATALINES y CARDS.

1 Bloque de código
DATA STEP Data
Explicación :
Lectura de un formato CSV estándar. La opción `dlm=','` especifica la coma como separador y `dsd` (Delimiter Sensitive Data) maneja correctamente las comillas y los valores faltantes.
¡Copiado!
1title '1.3.3a Delimited List Input Modifiers';
2DATA base;
3LENGTH lname $15;
4INFILE DATALINES dlm=',' dsd;
5INPUT fname $ lname $ dob :mmddyy10.;
6DATALINES;
7'Sam','Johnson',12/15/1945
8'Susan','Mc Callister',10/10/1983
9RUN;
2 Bloque de código
DATA STEP Data
Explicación :
Uso del modificador `~` (tilde) en la instrucción INPUT. Aquí permite leer campos que pueden contener delimitadores (como la coma en 'Fresno, CA') respetando la estructura DSD.
¡Copiado!
1title2 'Using the ~ Format Modifier';
2DATA base;
3LENGTH lname $15;
4INFILE DATALINES dlm=',' dsd;
5INPUT fname $ lname $ birthloc $~15. dob :mmddyy10. ;
6DATALINES;
7'Sam','Johnson', 'Fresno, CA','12/15/1945'
8'Susan','Mc Callister','Seattle, WA',10/10/1983
9RUN;
3 Bloque de código
DATA STEP Data
Explicación :
Lectura donde la longitud de las variables se define previamente mediante la instrucción `LENGTH`, lo que permite un control preciso del almacenamiento sin modificadores en el INPUT.
¡Copiado!
1title '1.3.3c Delimited List Input Modifiers';
2/* ... */
3DATA base;
4LENGTH lname birthloc $15;
5INFILE DATALINES dlm=',' dsd;
6INPUT fname $ lname $ birthloc $ dob :mmddyy10. ;
7DATALINES;
8/* Données ... */
9RUN;
4 Bloque de código
DATA STEP Data
Explicación :
Definición de varios delimitadores posibles para el mismo archivo. Aquí `dlm='/,'` indica que la barra oblicua O la coma pueden servir como separador.
¡Copiado!
1title '1.3.3d Read delimited code with multiple delimiters';
2DATA imports;
3INFILE CARDS dlm='/,';
4INPUT id importcode $ value;
5CARDS;
614,1,13
725/Q9,15
86,D/20
9RUN;
5 Bloque de código
DATA STEP Data
Explicación :
Uso de una variable (`dlmvar`) para pasar los delimitadores a la opción `dlm=` de la instrucción INFILE, ofreciendo más flexibilidad (ej: configuración dinámica).
¡Copiado!
1title '1.3.3e Read delimited code with multiple delimiters';
2title2 'Using a variable to specify the delimiter';
3DATA imports;
4retain dlmvar '/,';
5INFILE CARDS dlm=dlmvar;
6INPUT id importcode $ value;
7CARDS;
8/* Données */
9RUN;
6 Bloque de código
DATA STEP Data
Explicación :
Técnica avanzada: lectura del primer carácter de la línea (`input dlmvar $1. @`) para determinar cuál es el delimitador específico de esa línea, y luego relectura de la línea (`infile cards dlm=dlmvar`) con ese delimitador. (Nota: El código fuente original contenía un artefacto ' @code_sas_json...' que ha sido limpiado aquí).
¡Copiado!
1title '1.3.3f Read delimited code with multiple delimiters';
2title2 'Reading the delimiter during execution';
3DATA imports;
4INFILE CARDS;
5INPUT dlmvar $1. @;
6INFILE CARDS dlm=dlmvar;
7INPUT id importcode $ value;
8CARDS;
9,14,1,13
10/25/Q9/15
11~6~D~20
12RUN;
7 Bloque de código
DATA STEP Data
Explicación :
Uso de la opción `DLMSTR` (Delimiter String) disponible en las versiones recientes de SAS, que permite definir una cadena de caracteres completa (aquí ',,/') como separador único, y no una lista de caracteres individuales.
¡Copiado!
1title '1.3.3g Use a delimiter string';
2DATA imports;
3INFILE CARDS dlmstr=',,/';
4INPUT id importcode $ value;
5CARDS;
614,,/1/,,/13
7/* ... */
8RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.