SAS正則表達式之prxchange—一行代碼輸出多種結(jié)果
最近碰到很多需要研究且很有意思的需求,比如如何在不建立數(shù)據(jù)集的情況下用一行%SYSFUNC代碼把visit衍生為vt和dd。
我用的是正則表達式,首先data step程序如下:
需要注意的僅有兩點
如何識別除1以外數(shù)字。
如何按照不同需求得到所需結(jié)果。(如果字符串含有DAY 1,則Day 1。其余為Week xx。)
因為對于正則表達式,每個人的理解很可能不同,所以不便于他人維護,一般不推薦使用。盡管有時候為了應(yīng)對某些特定需求時很方便。
如何脫離data?step用%SYSFUNC顯示呢?
唯一需要注意的是我把/換成!,并且去掉‘‘。
因為%sysfunc(prxchange())將所有參數(shù)視為文本(宏的緣故),所以不需要引號。
正則表達式和%sysfunc的分隔符是不同的,如果不把/換成!,可以用%str(/)。
我在此處花了較多時間,原因是變量中的value末尾可能會帶有空格,而轉(zhuǎn)變?yōu)楹曜兞亢笫孜部崭穸紩サ?,這個時候尤其要考慮模糊匹配空格的問題。
此外加上%put效果也不同,有興趣可以自行嘗試。
總結(jié):????
????????為了顯示清楚,以上正則表達式用了實際數(shù)據(jù)的內(nèi)容,如果想要泛用,可以靈活使用Metacharacter。有興趣可以研究下,亦可延伸到其他情況。????????雖然實現(xiàn)方法很多,但是我司所用的工具如果不能用一行宏程序%sysfunc執(zhí)行,就需要新建數(shù)據(jù)集用常規(guī)方法解決問題。雖然我在研究非常規(guī)方法花的時間會比新建數(shù)據(jù)集方法多,但是收獲難以言表,一言難以蔽之。最明顯的結(jié)果就是以后其他項目用這一行代碼就可以實現(xiàn),快速便捷。
有重要程序圖片沒展示出來,有興趣可移步wx“gong zhong hao”: CDISC_SAS