我可以通过SAS中的多个键进行散列合并

时间:2018-06-07 19:53:34

标签: hash merge sas key

我想使用两个键在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;

但似乎这两个键找不到它。我只是想知道我的方法是否可行。

谢谢!

2 个答案:

答案 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的超集?