-
Hello Word!-SAS统计报表宏程序sas2word介绍之一 - [医学统计]
2009-10-21
/*
SAS宏程序名称:helloWord
主要功能:用SAS启动windows系统中的winword程序,打开一个已经存在的word文件或创建新文件
主要参数:dir:给定的目录;docName:word文件名
使用方法:%helloWord(d:\test\a,hello); **目录可任意给定,不用加引号;文件名可以不加.doc的后缀,当然加了也no problem;
说明:这个宏在XP/SAS9.13/Office2007下运行正常,在类似的环境下估计也无问题(比如XP/SAS8/Office2003),热心的朋友请帮忙测试,有问题的话希望能反馈给我;
另外还有一点,这个宏中引用了另一宏(mkdir,功能是建立文件夹),在helloWord运行过程中,如果给出的目录不存在就用mkdir创建这个目录。
联系我:medleaf@gmail.com
我的主页:http://www.eyaoo.net/weblog/
*********************************************************/
%macro helloWord(dir,docName);
options noxwait noxsync xmin;
%let rc=%sysfunc(system(start winword));
filename cmds DDE 'Winword|System';
data _null_;
x=sleep(1);
data _null_;
file cmds;
%mkdir(&dir);
put '[FileClose 2]';
if fileexist("&dir\&docName") then
do;
put '[FileOpen.Name = "'"&dir\&docName" '"]';
end;
else
do;
put '[FileNew]';
put '[FileSaveAs.Name="'"&dir\&docName"'",.Format=0]';
end;
put '[AppMinimize]';
%global currentDoc;
%let currentDoc = "&dir\&docName";
run;
%mend helloWord;
/*
记:
在sas2word中,这个是比较基础的宏程序,原来在我的文章里也介绍过,这次改写了很多,精简了代码,增加了容错(自动建立目录等)功能。注意: x=sleep(1);这一句中,建议在使用时将sleep的时间调的长些,如6或8秒,即x=sleep(8);否则,如果系统启动word的速度比较慢的话,可能会出现找不到文件的错误。
-
开始SAS报表宏程序的重新编写工作 - [医学统计]
2009-10-20
前几年利用SAS的DDE技术编写了几个用于统计报告报表的宏程序,将统计表直接写到WORD中,对于工作效率而言,确实提高了不少,不过这些宏程序编写的很乱,也不够完善,写统计报告的时候,还需要做些Ctrl+C后Ctrl+V的工作,所以决定重新编写这些宏程序,主要是精炼程序代码,增加功能,目标只有一个,即一键生成 Report(理想化,别当真,
)。
目前编写工作正在进行中,对于其中一些基础的宏,我将陆续放在这里,希望能和大家一起探讨,以便使这些SAS宏程序更加高效和通用。 -
文本与表格 SAS统计报表-动态数据交换(DDE)技术介绍(2) - [医学统计]
2008-12-21
使用sas的dde将文本写入Word文档,最常用的就两个WordBasic命令:Insert和InsertPara
看下面的这个例子:%helloword(c:\,example); /*注:1*/
data _null_;
file cmds;
put '[Insert "我的第一个例子"]‘; /*注:2*/
put ‘[InsertPara]‘; /*注:3*/
run;1:调用宏程序helloword,在C盘上建立一个名为example的Word文档
2:将“我的第一个例子”这几个字插入到上述文档当前光标的位置,也就是文档的第一行
3:插入一个段落标记,此时Word中的光标已经下移到第2行 -
Hello Word! SAS统计报表-动态数据交换(DDE)技术介绍(1) - [医学统计]
2008-12-21
将sas的统计分析结果输出到Word文档中,实现起来并不复杂,利用SAS提供的ods(Output Delivery System,输出传递系统),可以很方便的将结果输出到.rtf(也就是Word格式文档)、.html(网页)以及PDF文档中。
最简单的实现:
ods rtf file="filepath:docname.rtf";
proc step
...
ods rtf close;
然后非常不幸的是,上述输出结果是系统默认的,是SAS系统已经预定义好的格式(几乎所有的情况下都不符合我们的要求),如果想用ODS系统实现统计报表的定制输出,实现过程就要复杂的多。事实上,运行在OS/2及Windows操作系统下的SAS系统,还有另外一种与其它应用程序交互的技术,那就是Dynamic Data Exchange,动态数据交换技术,简称DDE。


RSS 订阅我的博客












