DDE技术介绍.doc_第1页
DDE技术介绍.doc_第2页
DDE技术介绍.doc_第3页
DDE技术介绍.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hello Word! SAS统计报表-动态数据交换(DDE)技术介绍(1)将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。DDE与ODS最大的不同在于,DDE的实现过程相对透明且是实时交互,而ODS则是将所有输出结果“打包”后按固定格式(除了print,report和tabulate这三个过程)输出。做个不大恰当的比方,DDE就好像买电脑时的攒机DIY,每个散件你可以自己挑,而ODS则是只卖整机,虽然ODS也允许你定制,但给你的只是整机。DDE与ODS在统计报表中都有应用,但作为两种不同的技术,无所谓孰优孰劣,我只关心利用它们我能实现什么。统计报表的输出,最重要的是规划统计表的结构,以及表格中每个单元格的数据和它的形式。利用ODS可以获取需要的数据集,修剪之后,再利用proc template定制的表格,可以实现自定义输出,但在数据的细节上,比如最常用的卡方检验,频率及百分比的输出,如果要用template定制的table将上述两个数据输出到一个单元格,格式为N(m%),那是很困难的。但应用DDE技术,你可以实现对Word文档的完全操控,特别是那些细节之处,而需要你掌握的WordBasic语句并不多。好了,字数也码得差不多了,来看一个例子:一个宏程序,打开一个空白的Word文档,然后建立一个名为docname,路径为filepath的Word文档。%macro helloword(filepath,docname);/* start word application */options noxsync noxwait xmin;filename cmds dde winword|system;data _null_;length fid rc start stop time 8;fid=fopen(cmds,s);if (fid le 0) then do;rc=system(start winword);start=datetime();stop=start+10;do while (fid le 0);fid=fopen(cmds,s);time=datetime();if (time ge stop) then fid=1;end;end;rc=fclose(fid);run;/* define the document name and the file path */data _null_;file cmds;put FileClose 2;put FileNew.Template=Normal.dot;put ChDefaultDir &filepath,0;put FileSaveAs.Name=&docname,.Format=0;put AppMinimize;run;%mend;比如,我要在C盘myfile目录下建立一个名为output.doc的文档:%helloword(c:myfile,output);然后,我要在这个Word文件中写几个字,然后保存:data _null_;file cmds;put Insert Hello Word!;put FileSave;run;需要注意的是,上述目录必须存在,否则Word会报错,因为它不会创建目录。文本与表格 SAS统计报表-动态数据交换(DDE)技术介绍(2)使用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行怎么样,用DDE将文本写入Word文档比较简单吧,用英文的双引号将文本引起来,利用Insert命令就直接将这些引用的文本插入到文档中了。如果此处的文本是一个宏变量,或者是一个宏程序中的参数,引用的格式稍有不同,实际上在宏程序helloword中就有这种情况:put ChDefaultDir &filepath,0;put FileSaveAs.Name=&docname,.Format=0;我们可以看到,对宏变量及参数的引用,使用的是英文的双引号单引号双引号“”将宏变量或参数引起来,在执行的时候宏变量或参数先被赋值然后执行,此时的宏变量或参数无需加双引号。如果定义宏变量或给参数赋值时加双引号,则使用双引号单引号“。接下来(把下面这几句插入到上面程序中Run;的前面):put Insert 表格1;put InsertPara;put Insert 单元格1+chr$(9)+单元格2+chr$(9)+单元格3+InsertPara; /*注:4*/put Insert 单元格2-1+chr$(9)+单元格2-2+chr$(9)+单元格2-3+InsertPara;put EndOfDocument; /*注:5*/put ParaUp 2,1; /*注:6*/put TextToTable.ConvertFrom=1,.NumColumns=3,.NumRows=2,.InitialColWidth=Auto,.Format=4,.Apply=63; /*注:7*/put FileSave;/*注:8*/我们来看看这几个语句的意义:4:这个语句中出现了chr$(9),其实这个就是制表符,为将来表格的形成做准备;另外,这个语句还有一个不同之处,就是在单引号中有两对方括号,即在一个put语句中可以写多条WordBasic命令,每个命令用一对方括号括起来。5:看这个命令的英文,我们就大概能猜出来,将光标放到文档的最末尾。当然,这个语句在这里其实没有用,因为光标已经在文档的末尾,我们只是为了举例。6:这个语句也很好记,向上移动光标,移动的最小单位是1行。它有两个参数,第一个参数是向上移动的行数,第二个参数表示是否选取,1表示选取当前光标至光标移动后所在位置的所有文本及控制符,0表示不选取,仅移动光标。ParaUp 2,1即表示选取当

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论