sas/正則/vba
年前項目收尾,事情比較多。既需要check數(shù)據(jù),又要撰寫SDRG之類的文檔,會耗費很多時間,所以花上一點時間去做幾個小工具還是很有必要的。
以下程序盡管是我編寫,但是因為server權(quán)限不能復(fù)制,所以不提供具體代碼。
如果是expected級別的變量即使完全為空也不能刪掉,并且需要我們在define.xml加一個comments。那么肯定是用程序才能快速找到這些變量。
我的思路:
????兩個字典:1.dictionary.tables
???????????????????? 2.dictionary.columns
????兩個循環(huán):1.數(shù)據(jù)集循環(huán)
?????????????????????2.變量循環(huán)
????兩個proc:1.freq
?????????????????????2.append
程序比較簡單,只是考驗sas的一些基本操作。
做--seq變量的時候要根據(jù)TOC對應(yīng)的columns內(nèi)容來排序變量,所以程序也跟著相應(yīng)的spec進行改變,我們可以把這一塊做成一個宏變量,只需要更改spec即可。
上圖比較單一,sas幾個函數(shù)都可以提取這段內(nèi)容。但是如果內(nèi)容復(fù)雜,我們就需要全面思考,精確用法可以使用正則表達式。
我的思路:
????兩個定位:1.定位[r_seq]首位置
?????????????????????2.定位[r_seq]末位置
????兩個提?。?.提取[r_seq]之前內(nèi)容
????????????????? ? ?2.提取[r_seq]
????兩個函數(shù):1.prxmatch
?????????????????????2.substr
由于時間緊迫,得到想要結(jié)果即可。所以沒有細致雕琢這部分代碼。之后會對正則表達式進行更加詳細的敘述。
寫adrg的時候需要把每個adam使用的external macro名字及每個external macro內(nèi)用到external macro的名字提取出來(很繞。。。),我司有腳本可以以excel格式實現(xiàn),但是也會把external macro里用到的internal macro提取出來。在此基礎(chǔ)上,我編寫了一個vba程序去除internal macro。
我的思路:
????1.提取external macro存放路徑下全部macro名稱
????2.在原格式的基礎(chǔ)上與excel中internal和external名稱進行比對,取交集
????3.根據(jù)adam分組去重
????4.新建并輸出到新sheet
其中2和4用到了scripting.dictionary。
和上述兩個程序同時編寫,加上對vba不熟悉,代碼簡潔度仍有上升空間。之后也會對vba進行學(xué)習(xí)和分享。
綜上所述,日常工作中即使sas是主要工具,但并不意味是唯一工具。我們面對的不僅僅是數(shù)據(jù)集、表、圖,還有各種excel和word文檔。其中作圖更需要靈活的技巧和豐富的經(jīng)驗,以后也會做出分享。
如對上述內(nèi)容有疑問或感興趣,歡迎留言或者私信,一起交流,不吝賜教!