Как заменить текстовый шаблон переменной

#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. Это осуществимое решение, спасибо Ричард. На прошлой неделе я был слишком занят, чтобы пересмотреть свой вопрос