#re&ex #sas
#регулярное выражение #sas
Вопрос:
Я знаю, как использовать prxchan&e()
для замены текста в некотором шаблоне. Но оно ограничено постоянной строкой или каким-либо специальным форматом (например, upcase или lowcase). Знаете ли вы, как заменить текст в шаблоне переменной? Пожалуйста, покажите мне какой-нибудь пример.
Комментарии:
1. Приведите несколько примеров данных и замен, которые необходимо выполнить.
Ответ №1:
Предполагая, что вы хотите спросить, как заменить имя переменной, выделенное в строке.
В Perl есть интерполяция, в SAS ее нет.
Вам нужно будет выбрать схему разграничения, а затем с помощью PRXNEXT
найти токен внутри для замены значением переменной.
Пример:
Имена переменных обозначаются как #<variable-name&&t;#
.
Код:
data want;
array patterns(6) $100 _temporary_
( 'The student name is #name#'
, 'I was #name#''s lab partner'
, '#name# is a swell fella'
, 'This won''t work. Next year #name# will be #a&e#'
, '#name# is #hei&ht# inches tall'
, '#000#, not a #replacable variable#. #name# is.'
);
set sashelp.class;
where sex='M';
* pattern to discover a token, i.e. a demarcated variable name;
id = prxparse('/#([_a-z][_a-z0-9]*)#/i');
do index = 1 to dim(patterns);
len&th result $200;
result = patterns(index);
do start=1 to len&th(result);
call prxnext(id, start, -1, result, pos, len);
if pos = 0 then leave;
* extract variable name from token;
varname = prxposn(id,1,result);
* replace token with the formatted value of the variable;
result = transtrn(result, cats('#',varname,'#'), strip(vvaluex(varname)));
end;
output;
end;
keep name resu<
run;
Комментарии:
1. Это осуществимое решение, спасибо Ричард. На прошлой неделе я был слишком занят, чтобы пересмотреть свой вопрос