当前位置: 首页>编程语言>正文

SAS正则表达式之prxchange—一行代码输出多种结果

最近碰到很多需要研究且很有意思的需求,比如如何在不建立数据集的情况下用一行%SYSFUNC代码把visit衍生为vt和dd。

SAS正则表达式之prxchange—一行代码输出多种结果,第1张

我用的是正则表达式,首先data step程序如下:

SAS正则表达式之prxchange—一行代码输出多种结果,第2张
SAS正则表达式之prxchange—一行代码输出多种结果,第3张

需要注意的仅有两点

如何识别除1以外数字。

如何按照不同需求得到所需结果。(如果字符串含有DAY 1,则Day 1。其余为Week xx。)

因为对于正则表达式,每个人的理解很可能不同,所以不便于他人维护,一般不推荐使用。尽管有时候为了应对某些特定需求时很方便。

如何脱离data step用%SYSFUNC显示呢?

SAS正则表达式之prxchange—一行代码输出多种结果,第4张
SAS正则表达式之prxchange—一行代码输出多种结果,第5张

唯一需要注意的是我把/换成!,并且去掉‘‘。

因为%sysfunc(prxchange())将所有参数视为文本(宏的缘故),所以不需要引号。

正则表达式和%sysfunc的分隔符是不同的,如果不把/换成!,可以用%str(/)。

我在此处花了较多时间,原因是变量中的value末尾可能会带有空格,而转变为宏变量后首尾空格都会去掉,这个时候尤其要考虑模糊匹配空格的问题。

此外加上%put效果也不同,有兴趣可以自行尝试。

SAS正则表达式之prxchange—一行代码输出多种结果,第6张
SAS正则表达式之prxchange—一行代码输出多种结果,第7张

总结:? ?

? ? ? ? 为了显示清楚,以上正则表达式用了实际数据的内容,如果想要泛用,可以灵活使用Metacharacter。有兴趣可以研究下,亦可延伸到其他情况。

? ? ? ? 虽然实现方法很多,但是我司所用的工具如果不能用一行宏程序%sysfunc执行,就需要新建数据集用常规方法解决问题。虽然我在研究非常规方法花的时间会比新建数据集方法多,但是收获难以言表,一言难以蔽之。最明显的结果就是以后其他项目用这一行代码就可以实现,快速便捷。

? ? ? ? 如有问题,欢迎私信,一起讨论交流!微信号:Terhing


https://www.xamrdz.com/lan/5n71994496.html

相关文章: