EN
【技术】SAS正则表达式这些概念,你get了吗
2024-09-24 09:07

在SAS编程中我们通常使用Substr、Tranwrd、Compress等函数实现对字符串的处理,而在涉及到复杂文本字符的处理时可能会略显不足。正则表达式(Regular Expression)可以构建复杂的匹配模式,用于字符串的搜索、替换、拆分。Base SAS 内置了正则表达式的实现,并提供了一系列 PRX- 函数及 CALL 子程序,便于对文本进行更为灵活的处理。


  一、正则表达式结构

在SAS中,正则表达式的使用遵循一定的语法格式,通常是以“/”开头和结尾,中间放置正则表达式的内容,SAS也支持双引号来定义正则表达式。正则表达式的内容由普通字符以及特殊字符(称为“元字符”)组成,它们共同定义了一个模式,用于在文本中匹配字符串。

1.普通字符:即标准的文本字符,如字母、数字等。在正则表达式中,普通字符直接表示它们自身。

2.元字符:具有特殊含义的字符,用于定义搜索模式的逻辑。

2.1常见元字符

2.png

2.2限定符:用于限制某个匹配模式的重复次数,默认为贪婪匹配,也就是尽可能多的进行匹配,在模式后加问号则表示懒惰匹配。

3.png

  

二、常用函数

在SAS中,正则表达式的常用函数主要包括以PRX(Perl Regular Expression)开头的函数,这些函数用于处理和分析符合正则表达式的字符串。以下是一些SAS中常用的正则表达式函数。

4.png

  

三、应用举例

1.日期提取

使用/(\d{4}|([Uu][Kk]){2})(\/|\-)(\d{2}|[Uu][Kk])(\/|\-)(\d{2}|[Uu][Kk])/ 匹配“YYYY-MM-DD”或“YYYY/MM/DD”的日期,并通过CALL PRXSUBSTR获得日期在字符串中的开始位置与长度,合用SUBSTR可以实现对匹配日期的提取。

正则表达式可视化:

5.png

SAS代码:

6.png

提取结果:

7.png

2.字符替换重排

通过(\d{4}|[Uu][Kk])(\/|\-)(\d{2}|[Uu][Kk])(\/|\-)(\d{2}|[Uu][Kk])匹配“YYYY-MM-DD”或“YYYY/MM/DD”的日期,使用prxchange函数调换年份月份日期的位置($1,$3,$5是对缓冲区字符串的引用),并统一连接符为“-”。

SAS代码:

8.png

替换重排结果:

9.png

3.提取访视

通过^(C\d{1,2}D\d{1,2})$匹配形如C*D*(*为1或2位数字)的访视,使用prxmatch函数对匹配到的访视进行提取。

SAS代码:

10.png

提取结果:

11.png

  

四、总结

正则表达式的优势在于其灵活性和精确性,可以处理各种复杂的文本模式,如提取特定格式的字符串、查找重复或特定的字符序列等。不过,正则表达式的复杂性越高,需要处理的文本数据量越大,运行速度可能就越慢。在面对超长字符串的简单处理时,正则表达式的运行速度会明显慢于Substr、Tranwrd等函数,在实际应用中,可以根据具体需求和场景来选择合适的方法。

我们如何帮您呢?凯莱英临床(凯诺)专业团队为您尽快提供服务