Pregunta

Tengo una cadena que se ve así:

 "ABAR_VAL", "ACQ_EXPTAX_Y",  "ACQ_EXP_TAX", "ADJ_MATHRES2"

Y me gustaría que se vea como esto:

ABAR_VAL ACQ_EXPTAX_Y ACQ_EXP_TAX ADJ_MATHRES2

es decir. no hay apóstrofes o comas y espacio individuales separadas.

¿Cuál es la manera más limpia / más corto para hacerlo en SAS 9.1.3?

Preferiblemente algo a lo largo de las líneas de:

call symput ('MyMacroVariable',compress(????,????,????))

Para ser claros, el resultado tiene que ser único espacio separado, carente de puntuacion, y contenida en una variable macro.

¿Fue útil?

Solución

Aquí tienes ..

data test;
var1='"ABAR_VAL", "ACQ_EXPTAX_Y",  "ACQ_EXP_TAX", "ADJ_MATHRES2"';
run;

data test2;
set test;
call symput('macrovar',COMPBL( COMPRESS( var1,'",',) ) );
run;

%put &macrovar;

Otros consejos

Es esto parte de una sentencia INFILE o está hecho querer crear variables macro que contienen estos valores? Si esto es parte de una sentencia archivoentrada que no es necesario hacer nada si usted tiene el delimitador de configurar correctamente.

infile foo DLM=',' ;

Y sí, puede de hecho utilizar la función de compresión para eliminar caracteres específicos de una cadena de caracteres, ya sea en un paso de datos o como parte de una llamada a la macro.

COMPRESS(source<,characters-to-remove>)

Datos de ejemplo:

data temp;
     input a $;
datalines;
"boo" 
"123" 
"abc"
;
run;

cuestión Resolve en un paso de datos (en lugar de crear una variable macro):

data temp2; set temp;
a=compress(a,'"');
run;

cuestión Resolve mientras que la generación de una variable macro:

data _null_; set temp; 
call symput('MyMacroVariable',compress(a,'"'));
run;
%put &MyMacroVariable.;

Vas a tener que recorrer las observaciones con el fin de ver los valores comprimidos de la variable para cada registro si se utiliza este último código. :)

Para comprimir múltiples piezas en bruto en una sola, utilizar compbl: http: / /www.technion.ac.il/docs/sas/lgref/z0214211.htm

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top