第六章 SAS数据集管理
第三节 TRANSPOSE过程
TRANSPOSE过程可以首先将数据集的观测变成变量,变量变成观测。TRANSPOSE过程可以用于拉直数据。
6.3.1 语法说明
TRANSPOSE语法说明如下。
常用选项说明见表6-2。
表6-2 TRANSPOSE语法常用选项说明
6.3.2 实例详解
例6.9 一个简单的转置程序。
程序解读:
1)由于没有使用VAR语句,因此程序对数据集score中的所有数值型变量(test1;test2和final)进行转置。
2)转置后,原来的7行变成7列,7列默认的变量名是col1-col7。3列变成3行,默认的变量名是_NAME_。
例6.10 使用ID、NAME和PREFIX选项。
程序解读:
1)该例比上例多了一些选项,但是转置的变量仍然只有test1、test2和final。
2)对上例中默认的变量名col1-col7用studentid的值替代,并添加前缀prefix=sn。
3)对上例中默认的变量名_NAME_用name=test替代。
4)对转置后的7个变量添加标签student值,用idlabel student语句。
例6.11 使用BY选项。
程序解读:
程序通过by location date语句对每一个BY组中的4个变量length1-length4进行转置,系统每读取一条BY组观测,转置后将产生4条观测。
可以用DATA步完成该需求,代码如下:
该例通过BY语句将列转成行,也可以将行转成列,代码如下:
可以使用DATA步完成该需求,代码如下:
比较两个DATA步可以发现:
1)如果需要把列转成行,则DO循环独立于SET语句,同时使用OUTPUT语句,保证程序每读入一条观测,通过DO循环和OUTPUT语句输出多条观测;
2)如果需要把行转成列,则DO循环包含SET语句,同时不使用OUTPUT语句,程序在DO循环中把循环次数对应读入的观测条数赋值给不同的列变量,最后通过RUN语句输出。
在商业实践中,应避免使用TRANSPOSE过程,特别是在大数据集的情况下,TRANSPOSE过程会非常消耗时间。而TRANSPOSE本质上是在程序后台运行DATA步,所以完全可以用自己开发的DATA步代码取而代之,相对于TRANSPOSE,DATA步的运行速度会非常快。