下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、SAS 中的哈希表散列表(Hashtable,也叫哈希表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。在 SAS 中使用哈希表十分简单,并不需要知道 SAS 内部是怎么实现的,但要需要知道哈希表是存储在内存中的,因而容量有一定的限制;在哈希表中查找”并不是真的查找,而是根据 key 值直接获得存储的地址。SAS 提供了两个类来处理哈希表,用于存储数据的 Hash 和用于遍历的 Hiter。Hash 类提供了查找、添加、修改、删除等方法,Hiter 提供
2、了用于定位和遍历的 firstnext 等方法。使用 Hash 表有以下的一些优点:*键值的查找是在内存中进行的,有利于提高性能。* Hash 表可以在数据步运行时动态地添加更新或删除记录。也就是说,Hash 表可以对数据进行一些微观的操作。* 在 Hash 表中可以很快地定位数据,由键值直接得到存储的地址,减少了查找次数。* 使用 Hash 可以做一些 merge 和 sql 难以实现的数据集合并, 在细节上可以有更多的控制。 定义 Hash类需要有下面三个步骤:1 .定义一个对象。2 .实例化该对象。3 .初始化该并对属性赋值。之后就可以调用 Hash 类的函数实现需要的功能:包括添加、查
3、找、替换、删除等等。* 定义对象declarehashmyhash;myhash=_new_hash();或者declarehashmyhash();* 初始化对象declarehashvariable_name(argument_tag-1:value-1* ,argument_tag-n:value-n);或者variable_name=_new_hash(argument_tag-1:value-1);初始化时的参数:hashexp:hash 表的框数。在查找数据时,SAS 首先用 hashfunction 得到数据所在的框“,然后再框内查找 key 对应的记录。框内的记录是用树形结构组
4、织的。因而数据查找的时间复杂度为 O(log(N/HSIZE),N 为记录的条数,Hsize 为框数;因此尽量用最多的框。dataset:定义从哪个数据集中导入数据到哈希表里ordered:定义使用 hiter 变量 hash 表及输出 hash 表到数据集时的顺序。ascending|a:根据 key 值升序。descending|d:根据 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说明Hash 是一个类,使用前需要首先进行实例化和初始化,然后定义常用的属性,在定义完成后才能调用对象的一些方法。本例中 declarehashh(dataset:?participants?);将数据集 participants 实例化成了一个 hash 对象 h,接下来使用 defineKey 和 defineData 定义 hash 表的键和值。
8、 接着使用 defineDone 来说明 hash 表的定义已经完成。本例使用了 hash 表的 find 方法,在读入一条观测后,使用 find 方法将得到与当前观测 Key值相等的记录,如果找到匹配的记录(find 返回的值为 0)则输出 Hash 表和主表中的所有变量当前的值。*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说明这个例子使用了 find/add/replace/output 这四个函数,与上个例子不同,本例没有通过数据集来构建一个 Hash 对象,刚开始时 Hash 表中并没有记录。首先通过 find 查看 Hash 表中有无 player 值匹配的记录,如果没有就使用 add 方法将当前观测的键和值插入到 Hash 表中。如果 Hash 表中
11、已经有和当前观测 player 值相等的记录,则使用 replace 方法更新 Hash表中该记录的值。在处理完 goals 中的所有观测后,使用 output 方法将 Hash 表中的记录输出到数据集中。在使用 add 时,如果 hash 表中已经存在相应的 Key,当前的观测会被忽略。需要注意 replace 和 add 的不同,由于在 Hash 表中相同的 key 值只能对于的到一条记录,当 hash 表中已存在与当期处理的观测 Key 值相同的记录时;使用 replace,该 Key 对应的值将被替换;使用 add 时,由于 hash 表中已经存在对应的记录,所以 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 口腔科试题题库
- 2025年安大思修考试试题及答案
- 情感计算模拟-洞察与解读
- 肿瘤科肺癌治疗指南
- 皮肤科病毒性疱疹护理措施
- 2025年禁毒知识竞赛题库及参考答案
- 感冒后的康复护理流程
- 临床急诊护理流程优化
- 风湿免疫科类风湿关节炎患者训练计划
- 2025四川德憬交通建设投资限公司引进专业技术人才2人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年河北保定徐水区妇幼保健院公开招聘专业技术人员25名笔试考试备考试题及答案解析
- 企业安全生产风险评估报告
- GB/T 46413-2025遥控潜水器作业规程
- 汽车文化考试题及答案
- 高校内部控制之实务与案例课件
- 掌握边际报酬递减规律课件
- 变压器交接验收课件
- 修井设备培训教材课件
- 民航安全风险管理-中国民
- 国开成本会计第9章综合练习试题及答案
- 大学生10分钟心理剧创意剧本8人
评论
0/150
提交评论