您现在的位置:e-works > 智造书屋 > 书籍列表 > SAS编程与数据挖掘商业案例 > TRANSPOSE过程

第六章 SAS数据集管理

第三节 TRANSPOSE过程

    TRANSPOSE过程可以首先将数据集的观测变成变量,变量变成观测。TRANSPOSE过程可以用于拉直数据。

6.3.1  语法说明

    TRANSPOSE语法说明如下。

语法说明

    常用选项说明见表6-2。

    表6-2  TRANSPOSE语法常用选项说明
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步的运行速度会非常快。