Friday, May 27, 2011

Template过程的简单而方便的应用

原文地址:http://www2.sas.com/proceedings/sugi31/112-31.pdf
Template 过程主要是设置一些输出文字、图表的格式,proc template很复杂,这篇文档介绍一种很实用的方法让大家学会使用template过程。
首先我们先看一个例子:
ods html file='sample1.html';
  proc contents data=sashelp.class short;
  run;
ods html close;
其结果如下:
[转载]Template过程的简单而方便的应用

这里我们可以看到的表格,表格的设置,字体大小,标题等都是通过style定义来实现的,虽然我们并没有对style进行定义,但系统给了一个默认的定义。我们将上面例子第一行增加一个style选项,即:
ods html file='sample1.html' style=default;
  proc contents data=sashelp.class short;
  run;
ods html close;
其结果同上。
这里的style就是通过template过程来实现的。下面我们可以通过template过程来看一下default下的style的内容:
proc template;
   source styles.default;
run;
运行上面的程序,在日志里面就可以看到styles.default的全部内容,但是太复杂了,我们很难全部都记住,下面就是本文要讲解的内容,如何方便地使用template过程。

下面这段程序就是方便应用template过程的秘诀:
ods markup file="sample2.html" tagset=tagsets.style_popup;
title 'Class List';
footnote 'See www.laurenhaworth.com for more ODS papers and examples';
proc means data=sashelp.class min median max maxdec=1;
run
ods markup close;
程序运行结果如下:
[转载]Template过程的简单而方便的应用

我们点击输出结果的任何一个地方,都会跳出其相对应的style定义。这样我们就可以对这些定义进行修改,从而生成我们需要的效果。例如上面看到的style definition里面的内容,就是对header(表格标题)的style的内容进行定义:
STYLE Header /
   FONT_FACE = "'MS Hei', GothicBBB, Arial, Helvetica, sans-serif" 
   FONT_SIZE =              
   FONT_WEIGHT = bold       
   FONT_STYLE = roman       
   FOREGROUND = cx0033aa   
   BACKGROUND = cxb0b0b0  
;
这样,我们通过改变表格标题的style的各个参数的内容来改变输出效果了。至于markup和tagset,这里你不用急着去管他们是如何实现这个功能的,先会用就行,以后有空会讲解。

在讲使用templete过程之前,还得先讲一下style以及styles.default,我们运行第三个程序(即proc template; source styles.default; run;)时,可以先看看内容:
首先是style这个关键词,然后是名字如fonts、graphfonts,colors等,然后是其相应的参数设置。但是Container这个style定义之后,定义就成了style Index from Container,其实这里就用到了面向对象编程里的继承,就是说index继承了Container的所有参数,然后还有自己的参数,index是container的子类,Container是index的父类。

面向对象的详细内容大家就去看相关书籍吧,下面回到本文的重点:如何应用template过程。
首先我们定义一个自己的style:Custom
proc template;
   define style Styles.Custom;
   parent = Styles.Default;
   end;
run;
这时,再对Styles.Custom进行表格标题修改,例如字体大小由3变成6,字体颜色也变为cxff00ff。
proc template;
   define style Styles.Custom;
   parent = Styles.Default;
    STYLE Header /
   FONT_FACE = "'MS Hei', GothicBBB, Arial, Helvetica, sans-serif"
   FONT_SIZE = 6
   FONT_WEIGHT = bold
   FONT_STYLE = roman
   FOREGROUND = cxff00ff
   BACKGROUND = cxb0b0b0;
   end;
run;
下面是对Styles.Custom的应用,这里的style就用到了我们新建的custom:
ods html file='sample1.html' style=Custom;
proc means data=sashelp.class min median max maxdec=1;
run;
ods html close;
结果如下:
[转载]Template过程的简单而方便的应用

表格标题的字体颜色和大小都发生了变化。

这样,我们需要对哪里的格式进行修改,我们就让其弹出格式,然后自己再定义格式就行。这样我们就可以对数据格式,表格格式,标题,注脚等进行格式设定。
下面我简单地讲一下设置标题和注脚格式,以及表格格式。
大标题以及注脚,系统是默认为相同的格式,可以通过以下语句进行分别设置:
proc template;
   define style Styles.Custom;
   parent = Styles.Default;
   STYLE SystemTitle /
      FONT_FACE = "Comic Sans MS, Helvetica, sans-serif"
      FONT_SIZE = 5
      FONT_WEIGHT = bold
      FONT_STYLE = italic
      FOREGROUND = cx002288
      BACKGROUND = cxe0e0e0;
   STYLE SystemFooter /
      FONT_FACE = "Arial, Helvetica, sans-serif"
      FONT_SIZE = 5
      FONT_WEIGHT = bold
      FONT_STYLE = italic
      FOREGROUND = cx002288
      BACKGROUND = cxe0e0e0;
   end;
run;

原理跟上面相同,就不再细讲。下面来详细讲一下表格的设置。
首先边框比较细,因此大家选的时候要细心点,选中后结果如下:
[转载]Template过程的简单而方便的应用

这里最后面的两个参数FRAME和RULES,它们的选项如下:

FRAME:
ABOVE:只有最顶部有边缘
BELOW:只有最底部有边缘
BOX:最左最右最顶最底有边缘
HSIDES:最项和最底有边缘
LHS:只有左边有边缘
RHS:只有右边有边缘
VOID:无边缘
VSIDES:最左最右有边缘

RULES:
ALL:所有行和列都有
COLS:列间有
GROUPS:
NONE:全无
ROWS:行间有
这个用得比较少,图片上显示效果不好,大家自己练习吧:
程序如下:
proc template;
   define style Styles.Custom;
   parent = Styles.Default;
   STYLE Table /
   FONT_FACE = "'MS Hei', GothicBBB, Arial, Helvetica, sans-serif"
   FONT_SIZE = 3
   FONT_WEIGHT = medium
   FONT_STYLE = roman
   FOREGROUND = cx002288
   BACKGROUND = cxf0f0f0
   CELLSPACING = 1
   CELLPADDING = 7
   FRAME = void
   RULES =none;  
   end;
run;
ods html file='sample1.html' style=Custom;
proc means data=sashelp.class min median max maxdec=1;
run;
ods html close;
结果如下:

 [转载]Template过程的简单而方便的应用
当然templete过程的功能远远不止于此,下面是另一篇文章介绍的对表格格式进行设定的介绍,有兴趣的看看,我只把程序和结果列出来,结果还是很炫的吧,呵呵:
原文地址:http://www2.sas.com/proceedings/sugi31/053-31.pdf

proc template;
define table mytable;
   cellstyle mod(_row_, 2) as {background=#e0e0e0},
             1 as {background=#c3c3c3};
   column name age sex height weight;
   define column weight;
   cellstyle _val_ >= 110 as {foreground=red},
   _val_ >= 90 as {foreground=yellow},
  1 as {foreground=green};
   end;
end;
run;

ods pdf file='c:striped.pdf';
data _null_;
   set sashelp.class;
   file print ods=(template='mytable');
   put _ods_;
run;
ods pdf close;

结果:

 [转载]Template过程的简单而方便的应用

0 comments:

 
Copyright 2010 NiuNiu's Warehouse. Powered by Blogger
Blogger Templates created by DeluxeTemplates.net | Blogger Styles | Balance Transfer Credit Cards
Wordpress by Wpthemescreator
Blogger Showcase