图 4: 字段函数示例
标题包括了“页数 第X页/共X页”,脚注包括了文件名,保存和创建日期等信息。如示例中所见,日期有不同的表现形式。在Word下使用与检测字段函数同样的方法可得到表述这些日期形式的特殊语句。在表格中标题是已插入的序列。以上函数可用于自动编码。 3.3.索引
实验得出,SAS的CONTENTS函数可支持内容目录。在一些情况下,该函数是可行的,但在大多数情况下需要手动建立不同的TOC。
在RTF中,一个索引也是一个简单的字段函数。Word中的标准内容目录是{TOC \\o \\%u}。此外,格式和水平深度可用{TOC \\t \标题 1;1;标题 2;2;标题 3;3\语句手动定义。创建其他索引也可使用这种内容目录。当使用‘table’格式来创建表时,表集合中的一个表格的标题可用{ TOC \\h \\z \\c \语句创建。在微软文字处理软件的语言版本中,有时表格内容中的分隔符是“,”而不是“;”。
很多文章中包括了RTF文档格式指派的问题。
在下一步中,字段函数必须嵌入到文档中。RTF中用反斜杠这个特殊字符来表示后面衔接的是标签。为了使反斜杠起到字段函数说明的功能,双反斜杠中的字符会被遮蔽。最后一个布局手法是,可以在字段不更新的情况下添加一个可视的文本,做法是在{\\fldrslt {文本}}中以临时结果的形式给出文本。
ODS RTF FILE=\
ODS RTF TEXT='^R/RTF\{\\fldrslt {table of contents }}}\ODS RTF CLOSE;
使用ODS RTF TEXT的一个缺点是包含文本的单元格总是以其所包含最长文本的长度作为其单元格的长度。为了更好地显示编译的TOC,单元格的宽度应该100%的利用起来,用OUTPUTWIDTH格式可以达到这种效果: ODS RTF FILE=\
ODS RTF TEXT='^S={outputwidth=100% just=l}^R/RTF\{\\field{\\fldinst{TOC \\\\o ''1-3'' \\\\h \\\\z \\\%u}} {\\fldrslt {table of contents }}}\ODS RTF CLOSE;
3.4.行标记 当一个特定的布局需要添加特别用途线时无法用ODS格式来实现。此时,可以在指定位置创建一条线。然而,表格和单元格的划线不受SAS的影响。但使用段落制表或许能在不同位置创建线条。有关内容可参见参考文献[5]。以下示例简单展示了这些标签的功能: ODS RTF FILE=\
PROC REPORT DATA=sashelp.class NOWINDOWS HEADLINE MISSING; column sex name age height weight; define sex / group; compute before _page_;
line '^R/RTF\endcomp; compute after sex;
line '^R/RTF\endcomp; RUN;
ODS RTF CLOSE;
在本例中表格标题下面和每个性别组上面都有一条线。有时在处理程序中没有显示这些线,但在打印或其他视图中这些线都会显示。
3.5.RTF中的缩进 另一个常常用到的功能是缩进,在ASCII中前导空格常被缩进。事实上,SAS中的AXIS功能可进行缩进且不删除前导空格和RTF输出。通常,我们更需要缩进功能而不是前导空格。ODS的格式代码“INDENT”不仅可以创建模拟缩进还可以创建真正的缩进。在大多数情况下,这个代码不够灵活,无法根据不同的前导空格数来进行缩进。缩进的RTF标签是\\li加上一个指出缩进宽度的数字。
要显示下列例子需要先创建有前导空格的数据集: PROC SORT DATA=sashelp.class OUT=class; BY sex name; RUN; DATA class2; SET class; BY sex;
LENGTH text $20; text = ' ' || TRIM(name); sort=2; OUTPUT; IF first.sex THEN DO;
IF sex = \ELSE text = \sort = 1;
age=.; height=.; weight=.; OUTPUT; END;
RUN;
PROC SORT DATA=class2; BY sex sort; RUN; OPTIONS MISSING=''; “ASIS”代码的用法如下:
ODS RTF FILE=\
PROC REPORT DATA=class2 NOWINDOWS HEADLINE MISSING style(column)={asis=on}; column text age height weight; RUN;
ODS RTF CLOSE;
可用以下代码来创建根据前导空格数进行缩进的程序: ODS RTF FILE=\
PROC REPORT DATA=class2 NOWINDOWS HEADLINE MISSING; COLUMN text age height weight; DEFINE sex / GROUP noprint; COMPUTE text;
spacediff = rxmatch(rxparse(\IF spacediff > 70
THEN CALL DEFINE(_col_, \\pretext='^R/RTF\compress(spacediff) || \ENDCOMP; RUN;
ODS RTF CLOSE;
图 5: 缩进示例
解释一下最后一个例子,我们一开始先用一个规则表达式求出了前导空格数。这个数又乘以一个常数。在本例中选用70作为宽度因为这是Times New Roman体的10号字空格的典型宽度。当存在前导空格时,这一行会按计算值(pretext)进行缩进。
然而,SAS在计算列宽时不会算入缩进值。因此宽度需要手动设置以避免不当断行。 4.后处理
后处理是指对RTF文档设计进行可能的优化的最后一个步骤。所有前期未能体现的特征均可在后处理步骤中产生。以遇到重复标题进行自动编号的过程为例,这里有一个问题,该过程可能存在重复的字段函数,为同一个表格编了两个号码。无论在使用page变量或为表格规定宽度时,同一个表格都会被分成几个不同的表从而出现上述问题。在后处理步骤中这些重复的标题可被删除或可用引用的最后字段替换自动编号的字段。
另外一个值得注意的地方是,在使用BODYTITLE 语句时,SAS会自动为新建的表格创建一个标题行一个注脚行,有时会引起一些问题。而这两行可以通过一个简单的数据步删除。此外,分页符有时不太好用;ODS RTF STARTPAGE=NOW语句常常无法运行。此外,当表格太宽太分散时,SAS不会内嵌分页符,只能在后处理中设置。
后处理如何执行并不重要。使用数据步和编程语言PEARL即可满足程序的需要,此外还可以运用微软文字处理软件所需的脚本语言VB。最重要的地方是执行的效率,对方法的认知和结果的稳定性。 结论
运用前述提到的方法结合直接RTF命令和后处理过程对ODS进行操作可以实现RTF的全部过程。ODS系统提供了很多简单实用的基本功能。在进一步的发展中,我们渴望新功能的实施以减少需要进行的特殊处理。
值得注意的是,ODS MARKUP中RTF的标签集的一个大优点是不会在每一个报告中使用特殊标签而是在默认标签集中包含了这些特殊标签。在SAS9.2版本中我们将会知道这个功能是否灵活好用。
总的来说,SAS中有不同复杂度,不同范围且灵活的操作可用于RTF布局。首先,尽可能用ODS RTF来实现操作。源代码应是明白易懂的。接下来,缺失的功能应尝试给出直接RTF命令来实现。如果这样还不能解决问题,最后一步才是后处理。因为后处理程序可能非常复杂,所以应尽量少使用后处理。在SAS系统中灵活使用这三步可以实现一切过程。
参考文献
[1] Lauren Haworth [2004] ?SAS with Style: Creating your own ODS Style Template for RTF Output”, SUGI 29 –Paper 125-29,
[2] SAS Support – “ODS FAQ and Conceuochengpts – The RTF Destination” [3] SAS 9.3.1 Online documentation, “Concepts: REPORT Procedure” [4] Rich Text Format (RTF) Specification, version 1.6, Microsoft MSDN
[5] Steve Prust [2005] “Experiences of using ODS : moving from ASCII to RTF output“, PHUSE 2005 – Paper TS06
[6] SAS Support – “Experimental RTF Features in SAS 9.1”
[7] Lauren Haworth [2005] ?Applying Microsoft Word Styles to ODS RTF Output”, SUGI 30 – Paper 043-30
[8] Elizabeth Axelrod, David Shamlin [2004] ?Skinning the Cat This Way and That: Using ODS to Create
Word Documents That Work for You”, SUGI 29 – Paper 084-29 -
[9] Wayne Hester [2006] “Teaching Your RTF Tagset to Do Clever Tricks” – SUGI 31 – Paper 067 – 31 联系方式
欢迎提出宝贵的意见和问题。以下地址可联系到作者: 先灵医药Sellerstr.31 13342 柏林
所涉及的品牌和产品名称均属于其相应公司。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于SAS软件的高级RTF排版(2)在线全文阅读。
相关推荐: