SAS实验室之PROC TRANSPOSE

首先,抛开SAS,回忆我们在数学课本上学习的转置是什么概念,转置如下图:

以上就是数学中的转置。

那么在SAS里该如何转置呢?

先看语法格式:

PROC TRANSPOSE <DATA=input-data-set> <DELIMITER=delimiter> <LABEL=label>
<LET> <NAME=name> <OUT=output-data-set> <PREFIX=prefix> <SUFFIX=suffix>;
BY <DESCENDING> variable-1
<<DESCENDING> variable-2 ...>
<NOTSORTED>; 

COPY variable(s); 

ID variable; 

IDLABEL variable; 

VAR variable(s); 

其中,VAR variable(s); 确定要转置的数据,后面跟数据对应的变量名;

ID variable;确定转置后新变量的变量名,若没有该语句,则新变量名以COLN的形式命名;
BY <DESCENDING> variable-1  <<DESCENDING> variable-2 ...> <NOTSORTED>; 确定以什么变量分组,最终各个组分别转置,后面跟要分组的变量名;
COPY variable(s); 对于没有转置但是要保留的变量给复制下来;IDLABEL VARIABLE;/<LABEL=label> 给被转置的变量加上标签;
<PREFIX=prefix>新形成的变量的变量名的前缀;
<SUFFIX=suffix>新形成的变量的变量名的后缀;LET 允许转置中存在重复值。

先看代码如下:

DATA A1;
    INPUT ID X1 $ X2 $ X3 $;
    CARDS;
    1 a1 a2 a3
    2 a4 a5 a6
    3 a7 a8 a9
    ;
RUN;
PROC TRANSPOSE DATA=A1 OUT=B1;
    VAR X1 X2 X3;
RUN;
PROC PRINT;
RUN;

代码中先造了一个如上图的矩阵,在进行了转置,输出结果为下图:

由结果可知,矩阵的主体就已经转置好了,其实SAS的PROC TRANSPOSE过程的核心是在于确定VAR语句,VAR跟着的变量名确定好了,整个转置的功能也完成的80%。

VAR跟着的变量就是原数据集中想转置的观测数据对应的变量名。

PROC TRANSPOSE DATA=A1 OUT=B1;
    ID X1;
    VAR X1 X2 X3;
RUN;

加上ID语句之后的运行结果为:

直接以X1列的观测作为新变量的观测了。而在实际应用中我们会以对应的项目名称变量,为新变量命名(如下面代码);

DATA A3;
    INPUT ID XYZ $ X1 $ X2 $ X3 $;
    CARDS;
    1 X a1 a2 a3
    1 Y a4 a5 a6
    1 Z a7 a8 a9
    2 X B1 B2 B3
    2 Y B4 B5 B6
    2 Z B7 B8 B9
    3 X C1 C2 C3
    3 Y C4 C5 C6
    3 Z C7 C8 C9
    ;
RUN;
PROC TRANSPOSE DATA=A3 OUT=B3(DROP=_NAME_);
    VAR X1 X2 X3;
    BY ID;
    ID XYZ;
RUN;
PROC PRINT;
RUN;

运行结果为:

以上代码演示了BY语句的效果,以ID的数据分类分组,然后在转置。

下面我们还可以看看其他几个options的效果;

如代码:

PROC TRANSPOSE DATA=A4 OUT=B1(DROP=_NAME_)LET LABEL=STUDENT
NAME=TEACHER PREFIX=prefix SUFFIX=suffix;
    VAR X1 X2 X3;
    BY ID;
    ID XYZ;
RUN;

得到的结果如下:

有了附加的OPTIONS 的小功能,使数据集看上去更加具有可读性。

时间: 2024-08-25 22:57:34

SAS实验室之PROC TRANSPOSE的相关文章

【SAS BASE】PROC EXPORT

PROC EXPORT可导出两种类型的文件: 导出delimited文件 1 *例子; 2 PROC EXPORT DATA=hotels 3 OUTFILE='C:\MyRawData\Hotels.txt' /*后缀名决定了输出文件的格式,除此之外,额也可以通过DBMS=选项来指定.*/ 4 /*例如:space-delimited文件时没有标准的后缀名的,只能通过DBMS=选项来输出*/ 5 DBMS=DLM /*若输出CSV文件,则DBMS=CSV; 6 若输出txt文件,则DBMS=T

【SAS BASE】PROC REPORT

PROC REPORT包含了PRINT.MEANS.TABULATE.SORT过程和DATA步的功能: 一.基本语法: 1 DATA natparks; 2 INFILE 'C:\MyRawdata\parks.dat'; 3 INPUT Name $ 1-21 Type $ Region $ Museums Camping; 4 RUN; 5 6 /*-----Group and Across Variables(Group:纵向;Across:横向)---*/ 7 *Region as Gr

【SAS BASE】PROC TABULATE(输出更加精美的tabulate报告)

PROC TABULATE的一般形式:(主语与FREQ过程不同,这里是table 语句,不是tables) 1 PROC TABULATE FORMAT=options;/*FORMAT=选项改变table中所有cell的格式*/ 2 VAR analysis-variable-list; 3 CLASS classification-variable-list;/*在下面table语句中出现的变量必须预先在VAR语句或CLASS出现过*/ 4 TABLE page-dimension, row

【SAS BASE】PROC FREQ

一般形式: 1 PROC FREQ; 2 TABLES variable_combinations/options; 3 /*variable_combinations 4 若为单变量:TABLE variable-name; 5 若为多变量: TABLE variable-name-1 variable-name-2 ...; 6 若为交叉变量:TABLES variable-name-1*variable-name-2; 7 */ 常见的options有: 1 LIST:将cross-tab

【SAS BASE】PROC MEAS

1 PROC MEANS OPTIONS; /*默认输出:非缺省数目.均值.标准差.最小值.最大值*/ 2 BY variable-list;/*必须要预先排序*/ 3 CLASS variable-list;/*功能与BY语句相同,不需要预先排序*/ 4 VAR variable-list; 5 OUTPUT OUT=data-set statistic(variable-list)=name-list; /*除了VAR与语句中的变量名外,还有两变量:_TYPE_和_FREQ_*/ 6 /*例

【SAS BASE】PROC SORT

1 PROC SORT DATA=data-set 2 OUT=neat 3 NODUPKEY 4 DUPOUT=extraobs; 5 BY variable-1 variable-2 ... variable-n; 6 RUN; 备注: 若不指定OUT=,则自动将排序后的数据代替原有数据集: NODUPKEY选项命令SAS 对BY语句中的变量删去重复观测值: DUPOUT=选项命令SAS将删去的数据放入其后指定的数据集中: 排序顺序(ASCII):blanks<-numericals(缺失值

【SAS BASE】PROC PRINT

1 PROC PRINT DATA=data-set NOOBS LABEL; 2 BY Variable-list;/*需提前排序,对每个BY变量输出,且在每页顶部打印该页By变量名*/ 3 ID Variable-list;/*不打印出观测值,且放在最左边*/ 4 SUM Variable-list; 5 VAR Variable-list; 6 RUN; [SAS BASE]PROC PRINT

【SAS BASE】PROC CONTENTS与LABEL

CONTENTS过程(查看数据集的属性) 1 PROC CONTENTS DATA=data-set; 2 RUN; LABEL 1 /*LABEL分为两种,但均不能超过256个字符*/ 2 LABEL=data-set (给数据集定义一个Label) 3 LABEL statement (赋予每个变量一个label) 4 5 /*对于变量来说,如果在DATA布中采用LABEL语句,则变量的描述会存储在数据集中,并在PROC CONTENTS中打印出来: 6 而若在PROC中采用,将不会存储在数

sas transpose过程

transpose基本语法 Note: If output-data-set does not exist, PROC TRANSPOSE creates it by using theDATA n naming convention. ??Note: If you omit the VAR statement, the TRANSPOSE procedure transposes all ofthe numeric variables in the input data set that ar