Faixa Apóstrofos a partir de uma cadeia de caracteres (compressa?)
-
23-08-2019 - |
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.
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 ¯ovar;
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