zoukankan      html  css  js  c++  java
  • 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 的小功能,使数据集看上去更加具有可读性。

    本博文由博主原创,不得在非博主允许情况下用作商业用途。 如需转载请注明博客地址:http://www.cnblogs.com/immaculate
  • 相关阅读:
    [转]windows下mysql配置文件my.ini的位置
    [转]Oracle 11g不能导出空表的多种解决方法
    [转]ORACLE WITH AS 用法(相当于查询开始前构造临时表,提高效率)
    [转]基于WordPress的微信小程序支付功能开发
    从数据库优化到治病(2)治好心悸过程
    算命三十多年的资深命理师的人生感悟!
    从高维度看世界
    鸾书精华
    实用QPS和TPS高的高效分析方法
    windows 安装 mysql
  • 原文地址:https://www.cnblogs.com/immaculate/p/6166233.html
Copyright © 2011-2022 走看看