SAS index 索引

最近在處理數據量較大的項目時,應用到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

相關文章
相關標籤/搜索