SAS在输出RTF文件时宽度为什么时99%?

我们SAS程序员在做TFL的时候一般都是用PROC REPORT步输出RTF文件,在设置列宽度的时候会用cellwidth=进行设置,所有列的宽度加起来占整个页面的99%,当我们把宽度设置成100%的时候,页面会发生换行的情况,为什么会这样呢?
做TFL的时候一般都是三线表,三线表只有上下边框,左右是没有边框的,其实左右边框是存在的,只是我们看不到(边框透明),边框也是有一定宽度的,这时候把列宽度设置成100%再加上边框的宽度实际上就超过100%了,所以会出现换行的情况。
那么想要设置成100%要如何操作呢?这个时候就要对template下手了,我们先看一下常用的style template是如何定义的。



















proc template;                                  define style TLstyle / store = WORK.TEMPLAT;                    parent = styles.rtf;                              class table /      fontweight = light        rules = group        frame = above      cellpadding = 0      borderspacing = 0                              ;   
style Body from Document / marginbottom = 1in margintop = 1in marginright = 1in marginleft = 1in ; end; run;
这里与边框有关的设置只有:


      rules = group        frame = above
前者规定了table的header和body之间有一个边框,后者规定了table最上面有一条边框。因此按照这个定义,table其实是没有左右边框的。看上去,尽管没有左右边框,SAS在计算宽度时仍然考虑了左右边框的宽度。这时候我们尝试把所有的边框去掉:


rules = noneframe = void
去掉所有边框以后就可以把宽度设置成100%而不换行了,但是同时也失去了上下边框,这时候该如何设置呢?我们来对template修改一下:






















proc template;                                  define style TLstyle / store = WORK.TEMPLAT;                    parent = styles.rtf;                            class table /    fontweight = light        rules = none        frame = void     cellpadding = 0    borderspacing = 0                                                      ;     class header /    borderbottomwidth=1                                                      bordertopwidth=1  ;    style Body from Document /                          marginbottom = 1in                               margintop = 1in                                marginright = 1in                              marginleft = 1in    ;     end;                                     run;
在上面的定义中,我们将table的边框定义成完全不显示,但是在header中显示上下边框:


borderbottomwidth=1                                                  bordertopwidth=1
这样我们就得到跟之前的效果,而且可以设置宽度为100%了。











请前往:http://www.mark-to-win.com/TeacherV2.html?id=166