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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM