



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、SAS 中的哈希表散列表(Hashtable,也叫哈希表),是根據(jù)關(guān)鍵碼值(Keyvalue)而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)。也就是說(shuō),它通過(guò)把關(guān)鍵碼值映射到表中一個(gè)位置來(lái)訪問記錄,以加快查找的速度。這個(gè)映射函數(shù)叫做散列函數(shù),存放記錄的數(shù)組叫做散列表。在 SAS 中使用哈希表十分簡(jiǎn)單,并不需要知道 SAS 內(nèi)部是怎么實(shí)現(xiàn)的,但要需要知道哈希表是存儲(chǔ)在內(nèi)存中的,因而容量有一定的限制;在哈希表中查找”并不是真的查找,而是根據(jù) key 值直接獲得存儲(chǔ)的地址。SAS 提供了兩個(gè)類來(lái)處理哈希表,用于存儲(chǔ)數(shù)據(jù)的 Hash 和用于遍歷的 Hiter。Hash 類提供了查找、添加、修改、刪除等方法,Hiter 提供
2、了用于定位和遍歷的 firstnext 等方法。使用 Hash 表有以下的一些優(yōu)點(diǎn):*鍵值的查找是在內(nèi)存中進(jìn)行的,有利于提高性能。* Hash 表可以在數(shù)據(jù)步運(yùn)行時(shí)動(dòng)態(tài)地添加更新或刪除記錄。也就是說(shuō),Hash 表可以對(duì)數(shù)據(jù)進(jìn)行一些微觀的操作。* 在 Hash 表中可以很快地定位數(shù)據(jù),由鍵值直接得到存儲(chǔ)的地址,減少了查找次數(shù)。* 使用 Hash 可以做一些 merge 和 sql 難以實(shí)現(xiàn)的數(shù)據(jù)集合并, 在細(xì)節(jié)上可以有更多的控制。 定義 Hash類需要有下面三個(gè)步驟:1 .定義一個(gè)對(duì)象。2 .實(shí)例化該對(duì)象。3 .初始化該并對(duì)屬性賦值。之后就可以調(diào)用 Hash 類的函數(shù)實(shí)現(xiàn)需要的功能:包括添加、查
3、找、替換、刪除等等。* 定義對(duì)象declarehashmyhash;myhash=_new_hash();或者declarehashmyhash();* 初始化對(duì)象declarehashvariable_name(argument_tag-1:value-1* ,argument_tag-n:value-n);或者variable_name=_new_hash(argument_tag-1:value-1);初始化時(shí)的參數(shù):hashexp:hash 表的框數(shù)。在查找數(shù)據(jù)時(shí),SAS 首先用 hashfunction 得到數(shù)據(jù)所在的框“,然后再框內(nèi)查找 key 對(duì)應(yīng)的記錄。框內(nèi)的記錄是用樹形結(jié)構(gòu)組
4、織的。因而數(shù)據(jù)查找的時(shí)間復(fù)雜度為 O(log(N/HSIZE),N 為記錄的條數(shù),Hsize 為框數(shù);因此盡量用最多的框。dataset:定義從哪個(gè)數(shù)據(jù)集中導(dǎo)入數(shù)據(jù)到哈希表里ordered:定義使用 hiter 變量 hash 表及輸出 hash 表到數(shù)據(jù)集時(shí)的順序。ascending|a:根據(jù) key 值升序。descending|d:根據(jù) key 值降序。YES|Y:升序。NO|N:不排序。例子:dataparticipants;inputname$gender:$1.treatment$;datalines;JohnMPlaceboRonaldMDrug-ABarbaraFDrug-BA
5、liceFDrug-A;dataweight(drop=i);inputdate:DATE9.;doi=1to4;inputname$weight;output;end;/*Forbrevity,onlytwodatesarelistedbelow*/datalines;05May2006Barbara125Alice130Ronald170John16004Jun2006Barbara122Alice133Ronald168John155;dataresults;lengthnametreatment$8gender$1;if_N_=1thendo;declarehashh(dataset:
6、?participants?);h.defineKey(?name?);h.defineData(?gender?,treatment?);h.defineDone();end;setweight;ifh.find()=0thenoutput;run;procprintdata=results;formatdateDATE9.;vardatenamegenderweighttreatment;run;Output:105MAY2006 BarbaraF125Drug-B205MAY2006 AliceF130Drug-A305MAY2006 RonaldM170Drug-A405MAY2006
7、 JohnM160Placebo504JUN2006 BarbaraF122Drug-B604JUN2006 AliceF133Drug-A704JUN2006 RonaldM168Drug-A804JUN2006 JohnM155Placebo說(shuō)明Hash 是一個(gè)類,使用前需要首先進(jìn)行實(shí)例化和初始化,然后定義常用的屬性,在定義完成后才能調(diào)用對(duì)象的一些方法。本例中 declarehashh(dataset:?participants?);將數(shù)據(jù)集 participants 實(shí)例化成了一個(gè) hash 對(duì)象 h,接下來(lái)使用 defineKey 和 defineData 定義 hash 表的鍵和值。
8、 接著使用 defineDone 來(lái)說(shuō)明 hash 表的定義已經(jīng)完成。本例使用了 hash 表的 find 方法,在讀入一條觀測(cè)后,使用 find 方法將得到與當(dāng)前觀測(cè) Key值相等的記錄,如果找到匹配的記錄(find 返回的值為 0)則輸出 Hash 表和主表中的所有變量當(dāng)前的值。*Exampletwo:Add/Replace/Outputdatagoals;inputplayer$when&$9.;datalines;Hill1st01:24Jones1st09:43Santos1st12:45Santos2nd00:42Santos2nd03:46Jones2nd11:15;da
9、ta_null_;lengthgoals_list$64;if_N_=1thendo;declarehashh();h.defineKey(?player?);h.defineData(?player?,goals_list?);h.defineDone();end;setgoalsend=done;ifh.find()A=0thendo;goals_list=when;h.add();end;elsedo;goals_list=trim(goals_list)|,|when;h.replace();end;ifdonethenh.output(dataset:?goal_summary?);
10、run;procprintdata=goal_summary;run;OutputObsplayergoals_list1Hill1st01:242Santos1st12:45,2nd00:42,2nd03:463Jones1st09:43,2nd11:15說(shuō)明這個(gè)例子使用了 find/add/replace/output 這四個(gè)函數(shù),與上個(gè)例子不同,本例沒有通過(guò)數(shù)據(jù)集來(lái)構(gòu)建一個(gè) Hash 對(duì)象,剛開始時(shí) Hash 表中并沒有記錄。首先通過(guò) find 查看 Hash 表中有無(wú) player 值匹配的記錄,如果沒有就使用 add 方法將當(dāng)前觀測(cè)的鍵和值插入到 Hash 表中。如果 Hash 表中
11、已經(jīng)有和當(dāng)前觀測(cè) player 值相等的記錄,則使用 replace 方法更新 Hash表中該記錄的值。在處理完 goals 中的所有觀測(cè)后,使用 output 方法將 Hash 表中的記錄輸出到數(shù)據(jù)集中。在使用 add 時(shí),如果 hash 表中已經(jīng)存在相應(yīng)的 Key,當(dāng)前的觀測(cè)會(huì)被忽略。需要注意 replace 和 add 的不同,由于在 Hash 表中相同的 key 值只能對(duì)于的到一條記錄,當(dāng) hash 表中已存在與當(dāng)期處理的觀測(cè) Key 值相同的記錄時(shí);使用 replace,該 Key 對(duì)應(yīng)的值將被替換;使用 add 時(shí),由于 hash 表中已經(jīng)存在對(duì)應(yīng)的記錄,所以 add 將被忽略。H
12、iterObject/*CreateInputDataSet*/datapatients;lengthpatient_id$16discharge8;inputpatient_iddischarge:DATE9.;datalines;Smith-412315MAR2004Hagen-283423APR2004Smith-243715JAN2004Flinn-294012FEB2004/*Loadanditerateoverhash*/data_null_;lengthpatient_id$16discharge8;declarehashht(dataset:patients,ordered:ascending);ht.defineKey(patient_id);ht.defineData(patient_id”,adischarge);ht.defineDone();declarehiteriter(h
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 系列產(chǎn)品培訓(xùn)
- 婦科腫瘤早期診斷
- 負(fù)壓患者心理護(hù)理
- 高效店長(zhǎng)培訓(xùn)體系構(gòu)建指南
- 2025年起重機(jī)械項(xiàng)目申請(qǐng)報(bào)告模板
- 2025年草除靈乙酯項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2025年福建三明城發(fā)綠城物業(yè)服務(wù)有限公司招聘考試筆試試題(含答案)
- 【包頭】2025年內(nèi)蒙古包頭職業(yè)技術(shù)學(xué)院引進(jìn)高層次和緊缺急需人才15人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 給予樹教學(xué)設(shè)計(jì)課件
- 水果類教學(xué)課件
- 2025至2030中國(guó)彈簧鋼行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 學(xué)習(xí)解讀《水利水電建設(shè)工程驗(yàn)收規(guī)程》SLT223-2025課件
- 部編版六年級(jí)語(yǔ)文上冊(cè)古詩(shī)、文言文日積月累(必背)
- 施工現(xiàn)場(chǎng)防火的安全管理制度
- FM筋膜手法(課堂PPT)
- 小升初數(shù)學(xué)重點(diǎn)知識(shí)點(diǎn)梳理
- [精選]臨床醫(yī)學(xué)概要知識(shí)點(diǎn)--資料
- 柳州市柳東新區(qū)南慶安置區(qū)項(xiàng)目工程基坑支護(hù)方案
- 采礦工程畢業(yè)設(shè)計(jì)(畢業(yè)論文)
- 工程塑料 第七章特種工程塑料
- 北京市2019年首批考試錄用公務(wù)員
評(píng)論
0/150
提交評(píng)論