Hash对象,也叫做Hash表,是一种提高数据查询效率的数据结构。Hash表使用散列的机制存储信息。在散列机制中,键的信息用于确定唯一的值,称为哈希码。然后将哈希码用作索引,在索引位置存储与键相关的数据。散列机制的优势是操作数据的执行时间保持不变,即使是对于比较大的数据量也是如此。
使用Hash对象编程是很多编程语言的一个特性,SAS也包含了这一特性。SAS内置了两种与Hash有关的对象:HASH和HITER。在一个data步里,我们可以创建一个Hash对象,这个Hash对象会留驻在内存里。当这个data步结束的时候,这个Hash对象会被自动删除。因此Hash对象的作用范围仅限于创建该Hash对象的data步。
下面我们以程序示例来说明Hash对象的使用。
假设有DM和LB两个数据集(数据集里的数据如下),我们需要对这两个数据集做一些数据处理。
DM数据集
SUBJID |
AGE |
SEX |
S003 |
23 |
F |
S004 |
39 |
F |
S011 |
45 |
F |
S017 |
30 |
M |
LB数据集
SUBJID |
LBTESTCD |
LBORRES |
S003 |
ALB |
45.8 |
S003 |
ALP |
40 |
S003 |
ALT |
5 |
S004 |
ALB |
50.5 |
S004 |
ALP |
50 |
S004 |
ALT |
10 |
S011 |
ALB |
48.5 |
S011 |
ALP |
59 |
S011 |
ALT |
12 |
Question 1
我们先看第一个问题:
查找出现在DM数据集但是不出现在LB数据集的受试者,显然在这个例子里是受试者S017。考虑使用Hash对象来解决这个问题,SAS代码如下: