我想使用两个键在SAS中哈希合并;
查找数据集的变量名称为link_id 8.和ref_date 8。 合并数据集的变量名称为link_id 8.和drug_date 8 .;
我使用的代码如下:
data elig_bene_pres;
length link_id ref_date 8.;
call missing(link_id,ref_date):
if _N_=1 then do;
declare hash elig_bene(dataset:"bene.elig_bene_uid");
elig_bene.defineKey("link_id","ref_date");
elig_bene.defineDone();
end;
set data;
if elig_bene.find(key:Link_ID,key:drug_dt)=0 then output;
run;
但似乎这两个键找不到它。我只是想知道我的方法是否可行。
谢谢!
答案 0 :(得分:0)
代码没有明显的问题。
要进行问题排查,请尝试合并排序:PROC SORT
两个数据集,然后merge
他们by
两个关键变量。这将显示哪些值看起来相似但不完全相同。
答案 1 :(得分:0)
此示例显示您有正确的方法。
data elig;
input lukey1 lukey2;
datalines;
1 1
1 2
2 4
3 6
3 7
run;
data all;
do key1 = 1 to 10; do key2 = 1 to 10;
array x(5) (1:5);
output;
end; end;
run;
data all_elig;
length lukey1 lukey2 8;
call missing (lukey1,lukey2);
if _n_ = 1 then do;
declare hash elig (dataset:"elig");
elig.defineKey ('lukey1','lukey2');
elig.defineDone ();
end;
set all;
if 0 = elig.find(key:key1, key:key2);
run;
显示的过程实际上并不是合并,因为查找散列没有明确的数据元素。没有指定数据时,键是隐式数据。
如果要选择所有数据行,则要排除故障的第一项是bene.elig_bene_uid
。它的密钥是否意外成为data
的超集?