SAS 程序分享:獲取邏輯庫(kù)中的全部日期數(shù)據(jù)(2)
在上一篇文章中,我分享了一種快速獲取邏輯庫(kù)中的全部日期數(shù)據(jù)的做法:SAS 程序分享:獲取邏輯庫(kù)中的全部日期數(shù)據(jù) - 嗶哩嗶哩 (bilibili.com),其中,我利用字典數(shù)據(jù)集獲取全部變量的清單,保留以“DAT”結(jié)尾的變量列表,然后遍歷這個(gè)變量列表,使用 call execute() 子程序動(dòng)態(tài)創(chuàng)建并執(zhí)行了一段程序,將“DAT”結(jié)尾的變量的值不斷追加到結(jié)果數(shù)據(jù)集中。然而,我限定日期變量以“DAT”結(jié)尾,實(shí)際情況卻并不總是如此。
可能的實(shí)際情況:
日期變量的名稱不以“DAT”結(jié)尾,甚至是毫無規(guī)律的,只是存儲(chǔ)著日期值;
日期變量有可能是數(shù)值型變量,此時(shí)變量帶有日期型輸出格式;
這對(duì)編程提取日期數(shù)據(jù)增加了一些麻煩,但我們可以分情況討論。
應(yīng)對(duì)第1種情況,可以使用正則表達(dá)式捕獲可能的日期值,例如日期 2023-07-14 可以簡(jiǎn)單地使用 /\d{4}-\d{2}-\d{2}/ 匹配,14JUL2023 則可以使用 /\d{2}\w{3}\d{4}/ 匹配。當(dāng)同時(shí)存在多種日期模式時(shí),就使用豎線將它們隔開。值得指出的是,多寫幾種可能的日期模式可以增加方法的魯棒性,但費(fèi)心寫盡所有所有可能的日期模式是沒有必要的,這幾乎不可能出現(xiàn)在用于商業(yè)分析的數(shù)據(jù)中。
應(yīng)對(duì)第2種情況,則可以在字典數(shù)據(jù)集中檢查它們的 format 是否為常見的日期格式?;谕瑯拥目紤],不需要尋找過多的數(shù)值型日期變量的輸出格式。
完整程序如下:
上述程序中,僅有輸出格式名以“E8601DA”、“YYMMDD”、“DATE”?為前綴的數(shù)值型變量,或其值匹配正則表達(dá)式“/^\d{4}-\d{2}-\d{2}|\d{2}\w{3}\d{4}$/”的字符型變量會(huì)被追加到結(jié)果數(shù)據(jù)集。在結(jié)果數(shù)據(jù)集中,原本的數(shù)值型變量按 yymmdd10. 格式存儲(chǔ)為字符值,而原本的字符型變量按原始值存儲(chǔ)。
基于上一篇文章中的示例數(shù)據(jù),上述程序的運(yùn)行結(jié)果為:
