Sas 通过数千次观测对数据进行子集划分

Sas 通过数千次观测对数据进行子集划分,sas,subset,Sas,Subset,我有两个数据集: 数据集1:此数据集有2300行。jobID在整个数据集中是相同的,但哈希在整个数据集中是唯一的 Hash jobID 3456343454 1077 3453454 1077 43673 1077 .... and so on 数据集2:此数据集有5838918行。不同的JobID值和不同的哈希值,例如: 散列作业ID 2223422 2 233435 155 2344322 1171 ... 等等

我有两个数据集:

数据集1:此数据集有2300行。jobID在整个数据集中是相同的,但哈希在整个数据集中是唯一的

Hash          jobID
3456343454    1077
3453454       1077
43673         1077
.... and so on
数据集2:此数据集有5838918行。不同的JobID值和不同的哈希值,例如: 散列作业ID 2223422 2 233435 155 2344322 1171 ... 等等

我试图尝试的是查看作为第一个数据集的一部分的任何哈希值是否也存在于第二个数据集中。由于第一个数据集中有上千个不同的唯一散列值,因此我无法键入其中的每一个值,以查看它是否存在于第二个数据集中,如下所示: 如果哈希值为(value1 value2…等),则显示数据集1中存在但不在数据集2中的所有哈希值

做这件事最好的方法是什么


此外,散列是字符($32格式和informat),而JobID是数字(格式:Best12./informat 12。)

如果我理解正确,您可以通过简单的合并进行检查

按哈希对两个数据集进行排序:

proc sort data=dataset1; by Hash; run;
proc sort data=dataset2; by Hash; run;
检查哈希是否在两个数据集中:

data check;
merge dataset1 (in=a keep=Hash)
dataset2 (in=b keep=Hash);
by Hash;
if a and b;
run;

请注意,我所做的只是检查散列,没有将任何其他变量带入最终数据集。

使用SQL查询创建第二个列表,您不必手动列出值

proc sql;
create table in1_not2 as
select *
from table1 as a
where a.hash not in 
     (select b.hash from table2 as b);
quit;

请再给我们一些代码和一个示例,说明您希望最终的数据集是怎样的。