对于统计程序员来说,根据mock shell产生各种统计图表是工作中很重要的部分。我们在产生统计图表时,往往会将图标的标题以及脚注填写到一份EXCEL表格中,便于我们后期的输出。
我们可以手动填写标题以及脚注信息,但是这么做效率并不高。为了节省时间,我们可以通过VBA以及SAS编程来读取mock shell中的标题以及脚注信息。
我们可以看到,一份mock shell文件主要由标题、三线表格、脚注组成。对于产生标题脚注文件时,三线表格是多余的信息,会干扰我们下一步的编程。因此我们选择使用WORD自带的VBA来进行处理。
Sub Removetables ()
Dim oTable As Table
For Each oTable In ActiveDocument.Tables
oTable.Delete
Next oTable
End Sub
Sub DeleteImage()
For Each ishape In ActiveDocument.InlineShapes
ishape.Delete
Next ishape
For Each ishape In ActiveDocument.Shapes
ishape.Delete
Next ishape
End Sub
以上的VBA代码,目的是清除mock shell文件中的表格以及图片信息。之后我们选择将清楚了表格图片信息后的mock shell另存为文本文件(.txt file)。接着我们使用SAS读取文本文件。
data WORK.TEST;
%let _EFIERR_ = 0;
infile 'filename.txt' delimiter='09'x MISSOVER DSD lrecl=32767 ;
length var1 $20000;
informat VAR1 $20000. ;
informat VAR2 $24. ;
informat VAR3 best32. ;
format VAR1 $20000. ;
format VAR2 $24. ;
format VAR3 best12. ;
input
VAR1 $
VAR2 $
VAR3
;
if _ERROR_ then call symputx('_EFIERR_',1);
run;
data test1;
set test;
where var1 ne "";
n=_n_;
proc sort;
by n;
run;
data test2;
retain nn 0;
set test1;
by n;
nn=nn;
if substr(upcase(var1,1,5)) in ("TABLE","FIGUR","LISTI") then nn=nn+1;
proc sort;
by nn n;
run;
proc transpose data=test2 out=test3;
by nn;
var var1;
run;
我们接着选取VAR1不为空的纪录,并通过观测序号确定数据集排序顺序,以便于后期的转置。并根据数据的实际情况进行一定的处理。在处理好之后,我们进行转置,即可得到标题脚注信息。