SAS

时间:2016-04-19 19:07:24

标签: hash merge sas hashtable

我正在尝试在两个表output.hicno_xwalkpapi_claim_01之间创建哈希合并。以前,我一直在使用proc排序和数据步骤进行正常的匹配合并。这是原始代码:

proc sort data = output.hicno_xwalk;
by HICNUMBER Plan_Type;
run;

proc sort data = papi_claim_01;
by HICNUMBER Plan_Type;
run;

data papi_claim_01a;
merge output.hicno_xwalk (in=a)
  papi_claim_01 (in=b);
by HICNUMBER Plan_Type;
if (b);
run;

现在,我正在使用它:

data hash_merge (drop = rc);
set output.hicno_xwalk point = _n_;
if 0 then set output.hicno_xwalk papi_claim_01; *load properties;
declare hash merge(dataset:'output.hicno_xwalk'); 
merge.definekey (HIC); *define variable to use as a key (no duplicates);
merge.definedata ('NEW_HIC','Plan_Type'); *Columns from the merge table to include;
merge.definedone(); *end hash;

do until (eof);
set papi_claim_01 end = eof;
if merge.find() = 0 then output;
end;
stop; *output records where HIC is found in both tables;

run;

但是,我的日志中出现错误

  

错误:第404行第5行的方法参数1的类型不匹配。   错误:期待字符类型。错误:数据步骤组件对象   故障。

     

在执行阶段中止。

试图告诉我的错误是什么,以及如何修复我的代码?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

必须引用键变量名称:

merge.definekey ('HIC')

另一方面,我不确定您的DATA步骤中某些代码的用途是什么(例如选项pointdo循环stop或多个set - 相同数据集的声明),但除非您因某些其他原因需要它,而不是在您的代码片段中显示,否则只需更简单地进行散列合并:

data hash_merge;
  set papi_claim_01;
  if 0 then set output.hicno_xwalk;
  if _n_=1 then do; *to avoid re-creating hash-object every time;
    declare hash merge(dataset:'output.hicno_xwalk'); 
    merge.definekey ('HIC'); 
    merge.definedata ('NEW_HIC','Plan_Type');
    merge.definedone();
  end;

  if merge.find() = 0;

run;