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-
<<DESCENDING> variable- ...>
<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;
a1 a2 a3
a4 a5 a6
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;
X a1 a2 a3
Y a4 a5 a6
Z a7 a8 a9
X B1 B2 B3
Y B4 B5 B6
Z B7 B8 B9
X C1 C2 C3
Y C4 C5 C6
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 的小功能,使数据集看上去更加具有可读性。
SAS实验室之PROC TRANSPOSE的更多相关文章
- 使用PROC TRANSPOSE过程步对数据集进行转置时如何保持日期变量的时间顺序
有一个数据集如下所示: 如果直接进行转置. SAS程序: proc transpose data=test out=outx1 (drop=_name_); by id; var amount; id ...
- SAS笔记(7) PROC SQL
参考资料:<Longitudinal Data and SAS: A Programmer's Guide>
- SAS笔记(6) PROC MEANS和PROC FREQ
PROC MEANS和PRC FREQ在做描述性分析的时候很常用,用法也比较简单,不过这两个过程步的某些选项容易忘记,本文就梳理一下. 在进入正文前,我们先创建所需的数据集TEST_SCORES: D ...
- sas transpose 代码备忘
OPTIONS NOCENTER LS=MAX PS=MAX; LIBNAME S '.\report';/*PROC PRINT DATA=S.doquestionr(WHERE=(sid=1972 ...
- SAS 评分卡开发模型变量统计及输出
以下代码实现功能: 1.获取10个模型分别使用哪些变量 2.变量所模型使用的次数 3.把上表格输出到EXCEL中 %INCLUDE '00@HEADER.SAS'; %let dir=..\04@Mo ...
- SAS笔记
SAS基础知识 SAS里面的PROC一览 The ACECLUS Procedure : 聚类的协方差矩阵近似估计(approximate covariance estimation for clus ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理
SAS学习笔记之<SAS编程与数据挖掘商业案例>(3)变量操作.观测值操作.SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 ...
- 《SAS编程与数据挖掘商业案例》学习笔记之十二
本次重点在:sas数据集管理 主要包含:包含数据集纵向拼接.转置.排序.比較.复制.重命名.删除等 1.append语句 注:base数据集和data两个数据集必须结构一样.避免使用force的情况, ...
- SAS语言结构
SAS程序用于访问.管理.分析和展现数据.其基础组成部分是 DATA步和PROC步,PROC步又称为SAS过程.一个SAS程序可包含以 任意顺序组合的多个DATA步和多个PROC步. DATA步通常用 ...
随机推荐
- jquery的滑动
(1)slideDown(speed,callback)方法:用于想下滑动的方法. $("#flip").click(function(){ $("#panel" ...
- Redis学习笔记-初级
1.Redis简介 Redis是一个高效缓存内存数据库,开源.免费.key-value格式 相比于其他key-value格式的缓存产品,特点/优势在于: 支持持久化,可以将内存中的数据保存在磁盘中,重 ...
- [题解]codevs1001 舒适的路线
h3 { font-family: Consolas; color: #339966 } .math { font-family: Consolas; color: gray } 题目描述 Descr ...
- SpringMVC保存数据到mysql乱码问题
SpringMVC保存数据到mysql乱码问题 乱码问题常见配置 一.web.xml配置过滤器 <filter> <filter-name>encoding-filter< ...
- genymotion不能联网
1.打开Oracle VM Virtual Box,选中相应的虚拟机,点击上侧工具栏中的『设置』: 2.选择『网络』,接着将: 网卡1的连接方式设置为仅主机(Host-Only)适配器: 将网卡2设置 ...
- Codeforces 702C Cellular Network
题目:这里 题意:一条数轴上,有n个城市和m个塔,分别给出城市的位置和塔的位置,每个塔有个覆盖范围,问能将所有城市都覆盖的塔的最小范围是多少,一个城市只要被至少一个塔 覆盖就行. 可以利用贪心的思想模 ...
- servlet总结
什么是Servlet Tomcat容器等级 手工编写第一个Servlet 使用MyEclipse编写Servlet Servlet生命周期 Servlet常用对象,且与Jsp九大内置对象的关系 Ser ...
- SQL Server 2008 r2 输入SQL语句不能自动提示的解决办法
先利用“配置工具-SQL Server 配置管理器”关闭所有MSSQLSERVER服务,利用SQL Server Installation Center,进入Maintenance,选择Repair, ...
- 兼容ie8 rgba()用法
今天遇到了一个问题,要在一个页面中设置一个半透明的白色div.这个貌似不是难题,只需要给这个div设置如下的属性即可: background: rgba(255,255,255,.1); 但是要兼容到 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...