【问题标题】:Can I do hash merge by multiple keys in SAS我可以通过 SAS 中的多个键进行哈希合并吗
【发布时间】:2018-06-07 19:53:34
【问题描述】:

我想在 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;

但是好像不是通过这两个键找到的。我只是想知道我的方法是否可行。

谢谢!

【问题讨论】:

  • 你有两个匹配的值吗?
  • 是的,实际上结果显示了数据的所有行
  • 请提供一些我们可以用来重现您的问题的虚拟数据,以及您尝试生成的相应输出。

标签: hash merge sas key


【解决方案1】:

代码没有明显问题。

要解决问题,请尝试合并排序:PROC SORT 两个数据集,然后merge 他们by 两个关键变量。这将显示哪些值看起来相似但不完全相同。

【讨论】:

    【解决方案2】:

    此示例表明您有正确的方法。

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

    【讨论】:

      猜你喜欢
      • 2019-01-24
      • 1970-01-01
      • 2013-06-17
      • 2016-04-22
      • 1970-01-01
      • 2011-10-28
      • 2013-05-04
      • 2018-08-24
      • 1970-01-01
      相关资源
      最近更新 更多