4.17 用proc report产生一个简单的输出
Report包含print、means和tabulate、sort的所有功能,可以用一本书来介绍,基本形式为:
PROC REPORT NOWINDOWS;
COLUMN variable-list;
Column语句类似于proc print的var语句,告诉SAS哪些变量该包括并以何种顺序,如果遗漏语句column,SAS默认在数据集中包括所有变量,如果遗漏选项nowINDOWS,SAS默认启用交互report窗口。为使数据和顶部能很好的区分开来,可以使用headline和headskip:
PROC REPORT NOWINDOWS HEADLINE HEADSKIP;
Headline在顶部下面拉了一条线,headskip在顶部下面留了一段空白。
数值变量VS字符串变量 从proc report得到的报告类型,部分依据于使用的数值类型。只要报告中起码有一个字符串变量,默认的报告就是每个观测值一行。但如果报告全是数值变量,默认proc report将会加总这些变量,即使是日期变量也会被加总。
例子 有一份关于美国国家公园(national parks)和国家纪念碑(monuments)的数据,Parks.dat,变量包括名字、类型(NP for national park or NM for national monument),地区(East or West),博物馆的数量,野营地的数量:
下面的代码形成了两份报告,第一份没有column语句,SAS使用所有变量,第二份使用column语句,选择部分变量:
第一份报告与proc print相似,第二份报告,由于只选择museum变量和camping两个数值型变量,默认直接显示加总情况:
4.18 在proc report中使用define语句
Define用来为单个变量指定一些选项,基本形式为:
DEFINE variable/options’column-header’;
Usage选项 这个选项告诉SAS如何使用这个变量,可能的usage选项包括:
Across:为变量的每一个变量值都创建一个列
Analysis:为变量创建统计量,数值变量默认有这个usage选项,且统计量默认为sum。
Display:为数据集中的每一个观测值都创建一行,对于字符串变量,这个选项是默认的。
Group:为每个变量的变量值都创建一行。
Order:为每个观测值都创建一行,且行值的排列是是按照指定的变量来顺序。
改变列顶部 proc report中几种方法可以改变列顶部,4.1中的label语句,或者用define语句指定列顶部,下面的代码使得SAS的report按照age排序,并且以“Age at Admission”作为列顶部:
DEFINE Age / ORDER 'Age at/Admission';
缺失数据 默认在order,group,和across variables中不考虑缺失值,用missing选项可以改变这种默认:
PROC REPORT NOWINDOWS MISSING;
例子 仍然是关于国家公园和纪念碑的数据,
下面的代码包含两个define语句,第一个用order选项来定义region,第二个为变量camping定义列顶部。Camping是一个数值变量,默认有analysis选项。Missing选项也出现在了proc语句中,因此缺失值也会被考虑在报告中:
输出结果为:
Region有三个变量值,第一个是missing缺失值。
4.19 用proc report创建简易报告
Group创建简易行,across创建简易列。
Group 变量 下面的代码告诉SAS创建一个显示每个部门工资总和、奖金总和(数值变量将默认被加总)的报告:
Across变量 corss变量,也需要define语句,不同的是,SAS默认不是对变量值求和,而是计数。如果要加总,则需要再across变量和analysis变量之间加逗号,告诉SAS哪个变量要加总,下面的代码告诉SAS用列来显示出每个部门工资和奖金的总和:
例子 仍然是国家公园和纪念碑的例子,
下面的代码包含两个proc report,第一个中,region和type都被定义成group变量,第二个中,region仍然是个group变量,但type是across变量。注意两个column语句基本一样,除了第二个中增加了标点(to cross the across variable with the analysis variables.)。
输出结果为