• /*
    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的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行

  • 将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。