Archivo de la etiqueta: COMPBL

Espacios en SAS

 

Las funciones SAS más habituales para eliminar blancos son las que tenéis en la figura de arriba. Para llegar a ese conjunto de datos SAS hemos ejecutado el siguiente paso data:

 data ejemplo;

st = "  Cuando  brilla   el sol    ";
l_st=length(st); output;

funcion="COMPRESS     "; st1 = compress(st); 
l_st1=length(st1); output;

funcion="COMPBL";  st1 = compbl(st); 
l_st1=length(st1); output;

funcion="TRIM";    st1 = trim(st); 
l_st1=length(st1); output;

funcion="TRIMN";   st1 = trimn(st); 
l_st1=length(st1); output;

funcion="STRIP";    st1 = strip(st); 
l_st1=length(st1); output;

funcion="SRTIP+COMBBL"; st1 = strip(compbl(st)); 
l_st1=length(st1); output;

run;

Distintas formas de eliminar espacios dentro de una cadena de caracteres en SAS. Partimos de la variable string " Cuando brilla el sol " y empleamos las siguientes funciones:

  • COMPRESS: Elimina todos los espacios en blanco de la variable
  • COMPBL: Elimina aquellos espacios en blanco que considera innecesarios, ejemplo '  ' -> ' '
  • TRIM y TRIMN: En este caso no hacen nada, así lo recordamos
  • STRIP: Elmina los espacios en blanco innecesarios por la izquierda
  • STRIP + COMPL: Es un combo de funciones pero el mejor para nuestro caso

Espero que entendáis mejor estas funciones. En breve veremos porque existen TRIM y TRIMN. Saludos.

Trucos SAS. Eliminación de espacios en blanco

Truco SAS práctico para aquellos que os estáis iniciando en el uso de las funciones de texto con SAS. Se trata de eliminar aquellos espacios en blanco que no son necesarios en una variable. Quería plantearos las posibles soluciones que se me han ido ocurriendo. Algunas de ellas no son eficientes pero es necesario que dispongáis de todas. En la línea habitual planteo un ejemplo para que lo ejecutéis y así podáis analizar los resultados:

data ejemplo;
palabra=" EJEMPLO DE ELIMINACIÓN DE BLANCOS CON SAS ";
uso_compress=compress(palabra);
uso_trimn=trimn(palabra);
uso_trimn_left=trimn(left(palabra));
uso_compbl=compbl(palabra);
length uso_rxchange $50.;
rx=rxparse("' ' to ' '"); drop rx;
call rxchange (rx,length(palabra),palabra,uso_rxchange);
run;

La variable palabra tiene tanto espacios por la derecha como por la izquierda y entre las palabras que no son necesarios. La función COMPRESS elimina todos los espacios en blanco. Con TRIMN y LEFT eliminamos los espacios en blanco al inicio y al final de palabra pero mantenemos los espacios en blanco entre palabras.
COMPBL (compress blank) parece más adecuada para eliminar los espacios en blanco sobrantes entre las palabras. La función de reconocimiento de patrones RXCHANGE (que necesita el patrón previamente con RXPARSE) sustituye dos espacios por uno sólo, el resultado no parece muy satisfactorio; esto mismo podríamos hacerlo con la función TRANWRD. A ver si algún lector encuentra un patrón adecuado para
estas funciones. 

¿La combinación óptima de funciones?

data ejemplo;
palabra=" EJEMPLO DE ELIMINACIÓN DE BLANCOS CON SAS ";
optimo=trimn(left(compbl(palabra)));
run;

Combinación de 3 funciones de texto que nos permite eliminar espacios en blanco. A continuación lo ponemos como una macro que realiza una función:

%macro noblanco(pal);
trimn(left(compbl(&pal.)))
%mend;
*;
data ejemplo;
palabra=" EJEMPLO DE ELIMINACIÓN DE BLANCOS CON SAS ";
optimo=%noblanco(palabra);
run;

Espero que sea de vuestra utilidad. Un saludo.

Trucos SAS. Borrando blancos innecesarios con COMPBL

Me ha llegado hoy una duda interesante. El problema era eliminar espacios en blanco innecesarios mediante alguna función de SAS. Más concretamente teníamos algo parecido a:

data prueba;
nombre="DE PEDRO     MARTINEZ    ESTEBAN JOSE";
/*QUEREMOS LLEGAR A: DE PEDRO MARTINEZ ESTEBAN JOSE*/
run;

Pues bien, esto se puede hacer con la función COMPBL que “remove blank spaces with SAS”:

data prueba;
nombre="DE PEDRO MARTINEZ ESTEBAN JOSE";
nombre2=compbl(nombre);
put nombre2;
run;

Una función fácil y práctica que seguro conocéis pero que no está mal recordar. Saludos.