zoukankan      html  css  js  c++  java
  • SAS中的Order By - Proc Sort

    SAS中的Order By - Proc Sort

    1.排序proc sort
    proc sort在按数据集中某一个变量或几个变量的升序或降序将记录重新排列,并把结果保存在输出数据集中,如果不另外指定输出数据集,则覆盖输入数据集。
    在data步和proc步某些操作中,当需要用到by语句时,一般都需要源数据集按照by语句中的变量事先排序,这里就需要用到proc sort。

    (1)语法格式
    PROC SORT  ;
    BY  variable-1 <... variable-n>;
    proc sort一些常用的选项:
    ·数据集选项
    data= 输入数据集,缺省时使用最近创建的数据集
    out= 输出数据集,缺省时表示排序后覆盖源数据集
    ·排序序列选项
    sortseq= 指定排序的序列,这跟使用的操作系统有关,Windows/Unix都是ASCII编码,一般这个选项缺省就行;也可以直接在proc sort后面加上编码名称。
    ·修改排序次序的选项
    reverse 使用由正常排序序列相反的排序序列对字符变量进行排序,可以被by语句中的descending选项取代,reverse只能用于字符变量。
    equals|noequals 规定输出数据集中具有相同by变量的那些记录的次序,equals选项是保持在输入数据集中原来的相对次序,而noequals选项则没有这一限制。
    ·删除重复记录的选项
    noduprecs 删除重复的记录,发生在排序后,将完全相同的记录删除。
    nodupkey 删除重复的by变量记录,发生在排序中,sort过程读取输入数据集中的记录,在写入输出数据集时先比较by变量值,如有重复则部写入输出数据集。这个选项要小心使用,因为SAS会删除by变量重复的记录,而不管该记录是不是重复的,这样就会丢失有效的数据。
    ·其他选项
    datecopy 保留数据集创建或修改的日期,缺省时排序也会被认为是修改,上次的修改时间就会被覆盖,可是有些时候我们并不希望SAS这么做。
    force 强制排序,不管输入数据集是否已经排序或有索引,都进行重新排序
    内存与磁盘优化选项排序在各种语言中是一种基本的算法,当数据集很大时会占用大量的计算机资源,这些选项提供算法在这方面的优化。

    by语句
    缺省情况下,是按照变量进行升序排列(ascending),降序则要显性的用descending指明。
    特别的是,这两个关键字应该写在变量的前面,而其他语言可能相反,如SQL将排序关键字放在变量之后。

    (2)运行机制
    proc sort会先检查输入数据集的排序信息,特别是sortedby=选项,如果输入数据集提示已经按照by变量进行过排序,或者sort过程检测到数据集中记录的顺序按照by变量本来就是有序的,则proc sort就会偷懒,不进行排序,直接将输入数据集复制到输出数据集中;另外,如果输入数据集在by变量上已经创建索引,则也不进行排序,因为排序之后会破坏原来的索引。除此之外,proc sort才会进行排序。
    那么,如果用户要强制sort过程进行排序呢?那就需要用到force选项了。
    (3)实例
    数据集按年龄大小进行排序,相同年龄的观测仍然按原来的次序。
    proc sort data=age equals;http://www.cda.cn/view/18248.html
        by age;
    run;

  • 相关阅读:
    Atitit 人脸识别 眼睛形态 attilax总结
    Atitit 手机号码选号 规范 流程 attilax总结 v2 r99.docx
    atitit 板块分类 上市公司 龙头企业公司 列表 attilax总结.docx
    Atititi atiitt eam pam资产管理 购物表去年.xlsx
    使用cmd查看电脑连接过的wifi密码(一)
    常见十大web攻击手段 悟寰轩
    常见web攻击方式 悟寰轩
    【MYSQL数据库】MYSQL学习笔记mysql分区基本操作 悟寰轩
    Filter及FilterChain的使用详解 悟寰轩
    启动tomcat spring初始化两次问题(eg:@PostConstruct) 悟寰轩
  • 原文地址:https://www.cnblogs.com/amengduo/p/9587402.html
Copyright © 2011-2022 走看看