SAS PROC TABULATE学习笔记01

SAS中的PROC TABULATE功能比较强大,使用好了能节约不少时间而且不易出错。

TABULATE作用?

一句话:A procedure that displays descriptive statistics in tabular format。其中descriptive statistics可以理解为描述统计学,描述统计学就是这样一个工具,它对极其庞杂的数据进行描述、概括或删减,使其变成能为人理解的东西。 

首个示例

详细学习tabulate之前,先看一个简单的例子,表1是SAS自带的逻辑库Sashelp中的一个数据集class,它包含了所有学生的性别、年龄、身高和体重数据:

表1

现在的需求是:
按照性别分类、统计对象是年龄和身高、统计项目包括样本数量、最大值、最小值和平均值,使用的程序如下:

proc tabulate data=sashelp.class ;
 class sex;
 var age height;
 table (age height)*(N MAX MIN MEAN), sex;
run;

运行结果如表2所示:

表2

当然,可以将table语句中的行列互换,修改为" table sex, (age height)*(N MAX MIN MEAN);" 运行结果如表3所示:

表3

基本概念

在介绍tabulate之前,先介绍几个基本概念

Row/Row heading/Column/Column heading/Cell

如图1所示,意思分别是行/行标题/列/列标题/单元格

图1

Table Dimensions

表纬度有3个,分别是page、row和column,意思分别是页、行和列,如图2所示:

图2

 

Category

分类/种类,它是指tabulate语法中class变量不同值的组合。比如上面的例子中class指定的是sex,即按性别进行分类,那么category有男和女这两种。
如果class指定的是age,那么那么Category有11、12、13、14、15、16这6个值。
如果class指定的是sex age,那么Category就有2*6=12个值,分别如下
"男 11", 
"男 12", 
"男 13", 
"男 14",
"男 15", 
"男 16",
"女 11",
"女 12",
"女 13",
"女 14",
"女 15",
"女 16",

比如将上面的例子的要求改一下,要求按照姓别和年龄统计分类,统计每种分类的学生数量

proc tabulate data=sashelp.class ;
 class sex age;
 table sex*age, N;
run;

输出结果如表4所示:

表4

TABULATE语法

完整的TABULATE语法如图3所示:

图3

这里先说几个最重要的

CLASS variable(s) </ option(s)>; 

CLASS后跟分类变量(英文class variables),即按哪些变量做分类,这些变量决定了有多少个Category。第1个例子中是姓别,它有两个category。

VAR variable(s) </option(s)>;

VAR 后跟分析变量(英文analysis variables),即要统计分析哪些变量,第1个例子中,是年龄和身高。

TABLE <<page-expression,> row-expression,> column-expression </ table-option(s)>; 

TABLE描述了要创建表的表结构,它有3个参数,分别描述page,row和column,参数间以逗号隔开,只有column是必选的参数。
如果有3个参数,那么3个参数分别表示页、行和列,输出表是3维表。
如果有2个参数,那么2个参数分别表示行和列,输出是2维表。
如果有1个参数,那么这个参数表示列。

注意:
1. 出现在TABLE 语句里的变量,之前必须在CLASS或者VAR语句里出现过
2. 如果要创建多张表,可以使用多个TABLE语句

TABLE最多支持3维表,每个维度是由纬度表达式( Dimension Expressions)组成,而Dimension Expression又由element和operator组成
element可以是 analysis variables、class variables、ALL、statistics关键字、format modifiers、labels等组成;
operator可以是星号*、空白、括号、尖括号;
第一个例子中的row expression如下:
(age height)*(N MAX MIN MEAN)

其中age height N MAX MIN MEAN都是element,而()和*都属于operator。
其中age height属于element中的class variables。N MAX MIN MEAN都属于element中的statistics关键字。
operator * 中的关键字是class variables的组合,也可以有一个是analysis variable,作用如下:creates categories from the combination of values of the class variables and constructs the appropriate headings for the dimension. If one of the elements is an analysis variable, then the statistics for the analysis variable are calculated for the categories that are created by the class variables. This process is called crossing. 

我画了一张简单的图,如图4所示,基本关系就是 tabulate主要有CLASS、VAR和TABLE语句, TABLE语句由3个纬度表达式组成,每个纬度表达式由element和operator组成。

图4

参考资料:

Basics of Proc Tabulate

SAS帮助文档

猜你喜欢

转载自blog.csdn.net/qingsong3333/article/details/107453590
SAS