欢迎光临散文网 会员登陆 & 注册

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

2022-02-16 09:44 作者:CDISC与SAS  | 我要投稿

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

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


需要注意的仅有两点

  1. 如何识别除1以外数字

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

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

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


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

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

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

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

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



总结:    

        为了显示清楚,以上正则表达式用了实际数据的内容,如果想要泛用,可以灵活使用Metacharacter。有兴趣可以研究下,亦可延伸到其他情况。        虽然实现方法很多,但是我司所用的工具如果不能用一行宏程序%sysfunc执行,就需要新建数据集用常规方法解决问题。虽然我在研究非常规方法花的时间会比新建数据集方法多,但是收获难以言表,一言难以蔽之。最明显的结果就是以后其他项目用这一行代码就可以实现,快速便捷。


有重要程序图片没展示出来,有兴趣可移步wx“gong zhong hao”: CDISC_SAS

SAS正则表达式之prxchange—一行代码输出多种结果的评论 (共 条)

分享到微博请遵守国家法律