sas/正则/vba
年前项目收尾,事情比较多。既需要check数据,又要撰写SDRG之类的文档,会耗费很多时间,所以花上一点时间去做几个小工具还是很有必要的。
以下程序尽管是我编写,但是因为server权限不能复制,所以不提供具体代码。
如果是expected级别的变量即使完全为空也不能删掉,并且需要我们在define.xml加一个comments。那么肯定是用程序才能快速找到这些变量。
我的思路:
两个字典:1.dictionary.tables
2.dictionary.columns
两个循环:1.数据集循环
2.变量循环
两个proc:1.freq
2.append
程序比较简单,只是考验sas的一些基本操作。
做--seq变量的时候要根据TOC对应的columns内容来排序变量,所以程序也跟着相应的spec进行改变,我们可以把这一块做成一个宏变量,只需要更改spec即可。
上图比较单一,sas几个函数都可以提取这段内容。但是如果内容复杂,我们就需要全面思考,精确用法可以使用正则表达式。
我的思路:
两个定位:1.定位[r_seq]首位置
2.定位[r_seq]末位置
两个提取:1.提取[r_seq]之前内容
2.提取[r_seq]
两个函数:1.prxmatch
2.substr
由于时间紧迫,得到想要结果即可。所以没有细致雕琢这部分代码。之后会对正则表达式进行更加详细的叙述。
写adrg的时候需要把每个adam使用的external macro名字及每个external macro内用到external macro的名字提取出来(很绕。。。),我司有脚本可以以excel格式实现,但是也会把external macro里用到的internal macro提取出来。在此基础上,我编写了一个vba程序去除internal macro。
我的思路:
1.提取external macro存放路径下全部macro名称
2.在原格式的基础上与excel中internal和external名称进行比对,取交集
3.根据adam分组去重
4.新建并输出到新sheet
其中2和4用到了scripting.dictionary。
和上述两个程序同时编写,加上对vba不熟悉,代码简洁度仍有上升空间。之后也会对vba进行学习和分享。
综上所述,日常工作中即使sas是主要工具,但并不意味是唯一工具。我们面对的不仅仅是数据集、表、图,还有各种excel和word文档。其中作图更需要灵活的技巧和丰富的经验,以后也会做出分享。
如对上述内容有疑问或感兴趣,欢迎留言或者私信,一起交流,不吝赐教!