Cuando tenemos saltos de línea o retornos de carro que nos dificultan las lecturas de ficheros de texto podemos leer caracter a caracter con SAS y elminar esos caracteres incómodos.
data _null_;
length char 1.;
infile 'C:\fichero_de_entrada.TXT' lrecl=1 recfm=F missover dsd;
file 'C:\fichero_de_entrada_depurado.TXT' lrecl=1 recfm=F;
input charASCII.;
if rank(char) = 13 /*SI ES WIN PONER EL 13*/ then char= "";
put char;
run;
Recomiendo no sobreescribir el fichero de texto y crear otro «depurado». Tendréis este problema cuando vuestro programa SAS os lea menos observaciones de las esperadas. Esto suele pasar cuando trabajamos con archivos de distintos sistemas operativos, como por ejemplo cuando leemos un archivo de texto unix con una máquina windows. Saludo.
Hola Raúl,
Qué tal estás? Otra pequeña aportación más… me he encontrado hoy con el problema similar. Un caracter de código ASCII en un txt que cortaba la importanción entera de un fichero plano txt.
He encontrado otra forma, que parece más eficiente, porque no lee y escribe el fichero plano, lo que hace es reemplazar. Es interesante conocerla cuando se manejan grandes volúmenes de datos (el conocido BigData, ya sabes, no? ;)
data replace;
/* Esta cadena está codificada en hexadecimal. Tiene baja ASCII, ABC, salto de línea, y 123 */
in = ‘0102034142430D0A303132’x;
/* Quitar el código ASCII y mantiene la altura de linea */
out = prxchange(‘s/[^\x20-\x7E\x0A\x0D]//’, -1, in);
run;
Un saludo
Hola Raúl,
Se me olvidaba añadirte que, este código lo he probado y funciona en SAS 9.1 y 9.2 con windoxs XP.
Un saludo!!
Hola Dolores,
Es algo de lo que ya hablamos en el blog:
https://analisisydecision.es/macros-sas-limpiar-una-cadena-de-caracteres/
Yo no lo usaba porque no me funcionaba en MAINFRAME y creo recordar que tenía problemas con las Ñ. ¿Sigue teniendo problemas con las Ñ?
Muchas gracias.
Hola Raúl,
Disculpa que no te contestase hasta ahora… no sabia que me habías escrito :O
Pues no me lo había planteado, no tuve problemas con la Ñ, y creo que el txt si lo tenia.
Siento no poder serte más útil.
Gracias a ti
Quiero eliminar el salto de linea con SAS
Buen día Colegas, soy principiante en esto de SAS , quisiera su apoyo para poder encontrar la solución:
Quiero cargar una BBDD mas o menos 100,000 registros en 85 columnas , dentro de esas columnas hay 4 que son de texto , pero me encuentro que hay texto con salto de linea y al carga la base en SAS me lo interpreta como si fuer una linea mas .
me encontre esta solucion dentro del mismo foro :
data _null_;
length char 1.;
infile ‘BBDD.txt’ missover dsd lrecl=1 recfm=F ;
file ‘BBDD nueva.txt’ lrecl=1 recfm=F ;
input charASCII.;
if rank(char) =10 then char= “”;
put char;
run;
me funciona bien y todo pero cuando ya quiero leer ” BBDD Nueva.txt ”
no me arroja registros , como si no la estuviera leyendo.
Entonces abri el archivo “BBDD Nuevo.txt” en Note Pad ++ y me doy cuenta que este archivo esta en Macintosh (CR) y si lo cambio a Windows (CRLF) y guardo los cambios me lo lee sin problemas.
Como hago esto desde SAS Studio sin necesidad de irme a NotePad ++
Responder