最近在處理數據量較大的項目時,應用到index索引與HASH對象的結合使用,總結一下對index做爲建索引的相關知識點數據結構
1.概念對象
索引:索引是一種輔助的數據結構,經過一個或者多個關鍵變量來直接指向觀測。SAS索引有兩類,簡單索引:只基於一個變量的值,索引名自動等於關鍵變量名;複合索引:基於多於一個的關鍵變量,需自定義惟一的名稱blog
2.什麼狀況使用索引排序
雖然索引能夠當作指向數據的快捷方式,可是索引的開銷至關高,包括磁盤空間的開銷及處理等,因此要考慮創建索引的狀況:索引
訪問的觀測遠遠小於整體文檔
用於BY語句引用已排序的變量效率
3.如何建索引變量
3.1 DATA步引用
/*簡單索引*/im
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