今天小编要分享一段根据Specification文件自动加工分析数据集的小程序,可以实现自动修改分析数据集变量标签、变量顺序、观测排序、变量属性、检验是否有遗漏变量及抓取其他数据集中的变量。好像功能说了一大堆,其实都是一些小功能,当然一些小功能也能很好的节省工作量,提高工作效率。
Specification
在分享程序之前呢,小编先来分享一下小编的Specification文件的结构,各公司的Specification的书写习惯可能会有一些出入,基于这种情况,就局限了今天要分享的程序参考价值大于了适用价值了。
metadata
ADSL
小编的Spec文件的结构就如上面的俩张图,做过SAS程序员的应该都会知道,我们一般是先根据SAP和CRF来写Spec文件。这个文件用来解释我们分析数据集里面的变量以及变量生成的过程,并指导分析数据集SAS程序的编写。一般的Spec文件的结构其实和小编的差不多,小编这里多了俩列,一列是Flag(生成分析数据集的时候直接抓取其他数据集中的变量);另外一列就是Sortorder(控制观测排序)。下面就来看小编程序实现的过程。
程序分享
首先来看下小编设置的宏参数以及调用宏的例子(如下截图)。
嗯,宏参数就不做过的解释了,上面截图感觉已经很详细了。接下来看看具体的程序思路与实现方法。
这一步的目的是将Spec文件中的metadata与指定的sheet导入SAS中。metadata表的作用是这个表包含了每个数据集的标签(不是变量的标签)。
这一步对是否取其他数据集中的变量做处理。如果Spec中Flag列填写的不为空,则自动获取其他数据集中的变量,如果Flag中填写内容的长度大于1,默认的是此处填写的where语句的条件。下面来看看执行到这一步生成的_tem_spec数据集。
上面的那个段data step目的就是生成截图中被框起来的部分,是不是很眼熟,这个Proc Sql中的语法结构,然后将其赋值宏变量,丢到Proc Sql过程步中,就实现了变量的自动抓取。基于数据的多变性,目前这里小编就设置了一种抓取(单数据集直接获取变量无加工),如果涉及到了变量从多个数据集中取值、填补等等,这个肯定是不行的。本着能少敲一个单词绝不多敲一个字母的原则,小编自认为还是很能节约时间,精简代码的。
这段程序的作用是利用proc sql定义宏变量,将一些程序语句塞进宏变量中,在后面程序中便于直接调用。都是取自导入Spec文件,以及加工而来的_tem_spec中。每一小段的作用是什么,具体可以看注释的提示。
定义完宏变量,就到了调用宏变量了,上面截图就是调用宏变量的过程。用来实现一些列注释上说的功能。好像metadata的导入没啥用呢,憋急,看下面,作用来了,给数据集加标签。