首页 > 解决方案 > 如何用变量替换文本模式

问题描述

我知道如何用prxchange()某种模式替换文本。但它受到常量字符串或某些特殊格式(如大写小写)的限制。你知道如何用变量替换模式中的文本吗?请给我看一些例子。

标签: regexsas

解决方案


假设您的意思是询问如何替换在字符串中划分的变量名。

Perl有插值,SAS没有。

您将必须选择一个划分方案,然后使用PRXNEXT在其中查找令牌以替换为变量值。

例子:

变量名称被划分为#<variable-name>#.

代码:

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 #age#'
  , '#name# is #height# 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);

    length result $200;
    result = patterns(index);

    do start=1 to length(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 result;
run;

推荐阅读