Убрать апострофы из строки символов (сжимать?) - PullRequest
1 голос
/ 03 апреля 2009

У меня есть строка, которая выглядит следующим образом:

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

И мне бы хотелось, чтобы это выглядело так:

ABAR_VAL ACQ_EXPTAX_Y ACQ_EXP_TAX ADJ_MATHRES2

т.е. без апострофов или запятых и пробела.

Какой самый чистый / кратчайший способ сделать это в SAS 9.1.3?

Предпочтительно что-то вроде:

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

Просто чтобы прояснить, результат должен быть отделен одним пробелом, без пунктуации и содержаться в макропеременной.

Ответы [ 3 ]

6 голосов
/ 05 апреля 2009

Вот, пожалуйста.

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;
2 голосов
/ 04 апреля 2009

Является ли это частью оператора infile или вы действительно хотите создать макропеременные, содержащие эти значения? Если это часть оператора infile, вам не нужно ничего делать, если вы правильно установили разделитель.

infile foo DLM=',' ;

И да, вы действительно можете использовать функцию сжатия для удаления определенных символов из символьной строки, либо в шаге данных, либо как часть вызова макроса.

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

Пример данных:

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

Устранить проблему на шаге данных (вместо создания макропеременной):

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

Решить проблему при генерации макропеременной:

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

Вам придется пройтись по наблюдениям, чтобы увидеть сжатые значения переменной для каждой записи, если вы используете последний код. :)

0 голосов
/ 05 апреля 2009

Чтобы сжать несколько заготовок в одну, используйте compbl: http://www.technion.ac.il/docs/sas/lgref/z0214211.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...