• SAS index 索引


    最近在处理数据量较大的项目时,应用到index索引与HASH对象的结合使用,总结一下对index作为建索引的相关知识点

     1.概念

    索引:索引是一种辅助的数据结构,通过一个或者多个关键变量来直接指向观测。SAS索引有两类,简单索引:只基于一个变量的值,索引名自动等于关键变量名;复合索引:基于多于一个的关键变量,需自定义唯一的名称

     2.什么情况使用索引

     虽然索引可以看成指向数据的快捷方式,但是索引的开销相当高,包括磁盘空间的开销及处理等,所以要考虑建立索引的情况:

    访问的观测远远小于总体

    用于BY语句引用已排序的变量

     3.如何建索引

     3.1 DATA

    /*简单索引*/

    DATA  A(INDEX=(age));

    SET SASHELP.CLASS;

    RUN;

    /*复合索引*/

    DATA B(INDEX=(A_W=(AGE WEIGHT)));

    SET SASHELP.CLASS;

    RUN;

     3.2 PROC SQL

    PROC SQL;

    DROP INDEX AGE FROM A;

    CREATE INDEX AGE ON A(AGE);/*简单索引*/

    CREATE INDEX A_W ON A(AGE,WEIGHT);/*复合索引*/

    QUIT;

     3.3 PROC DATASETS

    PROC DATASETS LIB=<libname>;

    MODIFY <datasetname>;

    INDEX CREATE <index_name>/<NOMISS> <UNIQUE>

    <UPDATECENTILES=ALWAYS|NEVER|integer>

    RUN;

    这里:

    libname:逻辑库名称

    Datasetname:数据集名称

    Index_name:索引名,可以是一个关键变量名,也可以是自定义的变量名,但需要指定对应哪几个变量

    选项中:

    NOMISS:从索引中排除所有索引变量缺失值的观测

    UNIQUE:指定索引变量或者变量组合必须是唯一的

    UPDATECENTILES:指定数据值更新多少时,索引也随之更新,可以是总是更新|从不更新|设定的百分比10(表示10%),默认是5(percent)

    LIBNAME S ‘.’;

    /*简单索引;指定对S逻辑库下A数据集,以AGE为关键变量建索引*/

    PROC DATASETS LIB=S;

    MODIFY A;

    INDEX CREATE AGE;

    RUN;

    /*复合索引:三个关键变量括号里的顺序为关键次序,A_W_H是唯一的索引名*/

    PROC DATASETS LIB=S;

    MODIFY A;

    INDEX DELETE AGE;/*删除索引*/

    INDEX CREATE A_W_H=(AGE,WEIGHT,HEIGHT);

    RUN;

    需要注意的是,如果原有的索引已经存在,必须先删除,再重新建立

     4. OPTIONS MSGLEVEL=N|I;查看索引的使用情况

    N:仅打印NOTES、WARNING、ERROR信息,系统的默认选项。

    I:打印N选项的信息,同时打印附属信息,包括索引的使用、合并处理、排序等附加信息。

    5.SAS不使用索引的情况

    (1) DATA步使用IF语句取子集

    (2)WHERE 表达式只有部分包含关键变量

    (3)SAS检测出顺序读取数据更有效率

    6.示例:实现对年龄的分组,组内排序


    结果:




    参考文档:http://blog.163.com/shen_960124/blog/static/6073098420136161844551/和SAS help

  • 相关阅读:
    在普通类中调用service
    layui util 工具时间戳转换
    最大值
    药房管理
    线段树2
    线段树1
    Dijkstra
    最大值最小化
    图的M 着色问题
    取余运算
  • 原文地址:https://www.cnblogs.com/Anni-love-Ferris-wheel/p/7686842.html
Copyright © 2020-2023  润新知