首页 > 解决方案 > SAS中的Perl正则表达式PRXCHANGE

问题描述

我想对以下陈述有所帮助。

我试图将 2 个 prxchange 语句合并为一个。

该代码的目的是将任何不可打印的 ASCII 字符更改为相应的用双括号括起来的 2 个字符的十六进制代码,例如 [A0]。

下面的第一条语句更改了十六进制字符 xA0。第二个更改 x20 到 x7E 范围内的十六进制字符。

是否可以将这些语句合并为一个?

            var = prxchange ( "s/([\xA0])/[A0]/"       , -1 , varcontent);
            var = prxchange ( "s/([^\x20-\x7E])/[$1]/" , -1 , varcontent);

标签: regexsas

解决方案


您是否考虑过使用该HEX.格式来代替?如果您有 SAS,Regex 似乎是一种相当复杂的方法。

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000205154.htm

例如

data _null_;
  length a b $32;
  a = '09400940'x;
  do i = 1 to length(a);
    char = substr(a,i,1);
    rank = rank(char);
    if rank < 32 then b = cats(b,'[',put(rank,hex2.),']');
    else b = cats(b,char);
  end;
  put a= $32. / b= $32.;
run;

推荐阅读