Substr

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: