Archivo de la etiqueta: tranwrd

Macros (fáciles) de SAS. Normaliza un texto rápido

¿Tienes que normalizar un texto con SAS? Llevas 2 horas buscando funciones de texto con la ayuda y te has crispado. En una macro y de forma muy rápida os planteo un muestrario de funciones con las que podéis normalizar (un poco) un texto. Esto es algo que tuve que hacer la otra mañana no es muy sofisticado pero que puede seros de utilidad:

%macro prepara(varib);
&varib.=translate(&varib.,"AEIOU","ÁÉÍÓÚ");
&varib.=tranwrd(&varib.,"NUM","NUMERO");
&varib.=tranwrd(&varib.,"CONT","CONTABLE");
&varib.=tranwrd(&varib.,"IMP ","IMPORTE ");
&varib.=tranwrd(&varib.," POR "," ");
&varib.=tranwrd(&varib.," DE "," ");
&varib.=tranwrd(&varib.," EN "," ");
&varib.=tranwrd(&varib.," LOS "," ");
&varib.=tranwrd(&varib.," AL "," ");
&varib.=tranwrd(&varib.," EL "," ");
&varib.=tranwrd(&varib.," ULTIMOS 12 "," 12 ");
&varib.=tranwrd(&varib.," ULTIMOS 3 "," 3 ");
&varib.=tranwrd(&varib.," ULTIMO MES "," MES ");
&varib.=tranwrd(&varib.," TRANSACCIOENES "," TRANSACCIONES ");
call prxchange(prxparse('s/([A-ZÑa-zñ 0-9]*)([^A-Za-zÑñ 0-9]*)/$1/'),-1,&varib.);
%mend;

En realidad es una sucesión de TRANWRD pero destacaría el uso de la función TRANSLATE para eliminar tildes en nuestras vocales y el uso de CALL PRXCHANGE del que ya tuvimos un aperitivo hace tiempo. Sólo tenéis que copiar y pegar y si tenéis dudas mejor seguid el hilo porque últimamente me están llegando demasiadas por correo y no dispongo de tiempo, algo que ya habréis detectado muchos de los seguidores del blog. De todos modos tengo trucos de estos para seguir dotando de contenido al blog en los próximos meses. Por cierto, si alguien lo mejora que siga el hilo...

Macros SAS. Limpiar una cadena de caracteres

Macro de SAS que he utilizado hoy para limpiar caracteres en una cadena de texto. Está muy limitada y es muy sencilla pero puede serviros:


%macro valida(in,out);
length escribe $55.;
escribe="";
do i=1 to length(&in.);
  j=substr(&in.,i,1);
 if j in ('A','B','C','D','E','F','G','H','I','J','K',
 'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','Ñ') then escribe=trim(escribe)||j;
 else if substr(&in.,i,1)=" " then escribe=trim(escribe)||"-";
 else escribe=trim(escribe);
 drop i j escribe;
end;
&out.=tranwrd(compress(escribe),"-"," ");
%mend;

Es bastante mala y limitada, insisto. Si alguien aporta algo se agradecerá. El tema es que recorre una variable alfanumérica carácter a carácter y si no es una letra mayúscula se lo chimpunea sin ningún miramiento, aporta un poco más de talento cuando aparece un espacio en blanco. Ahí va el ejemplo de uso:


data _null_;
y="ME.N9UDA@ CAGA--;DA vENIR";
%valida(upcase(y),x);
put x=;
run;

En fin, si la voy mejorando lo sigo comunicando. Por cierto, esto se puede hacer con WPS a la perfección. Si alguno de vosotros está interesado en WPS o tiene ya jornada de verano y necesitan consultoría que me escriba a rvaquerizo@analisisydecision.es