Pergunta

Eu tenho uma string que se parece com isso:

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

E eu gostaria que ele se parece com isto:

ABAR_VAL ACQ_EXPTAX_Y ACQ_EXP_TAX ADJ_MATHRES2

i. sem apóstrofos ou vírgulas e espaço simples separados.

O que é a forma mais limpa / mais curto para fazê-lo em SAS 9.1.3?

De preferência algo ao longo das linhas de:

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

Só para ficar claro, as necessidades de resultado a ser único espaço separado, desprovido de pontuação, e contida em uma variável macro.

Foi útil?

Solução

Aqui você ir ..

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;

Outras dicas

Isso é parte de uma instrução infile ou você está de fato querendo criar variáveis ??macro que contêm esses valores? Se isso é parte de uma instrução infile você não deve precisar de fazer qualquer coisa se você tem o conjunto delimitador corretamente.

infile foo DLM=',' ;

E sim, você pode realmente usar a função compressa para remover caracteres específicos de uma cadeia de caracteres, em um passo de dados ou como parte de uma chamada de macro.

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

Amostra de dados:

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

problema Resolve em um passo de dados (em vez de criar uma variável macro):

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

problema Resolve enquanto gerando uma variável macro:

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

Você terá que percorrer as observações, a fim de ver os valores compactados a variável para cada registro se você usar o último código. :)

Para comprimir vários espaços em branco em um, o uso compbl: http: / /www.technion.ac.il/docs/sas/lgref/z0214211.htm

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top