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

sas/正则/vba

2022-01-22 11:39 作者:CDISC与SAS  | 我要投稿

年前项目收尾,事情比较多。既需要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文档。其中作图更需要灵活的技巧和丰富的经验,以后也会做出分享。


如对上述内容有疑问或感兴趣,欢迎留言或者私信,一起交流,不吝赐教!


sas/正则/vba的评论 (共 条)

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