2016-04-19 5 views
0

Я пытаюсь создать хэш-слияние между двумя таблицами, output.hicno_xwalk и papi_claim_01. Раньше я делал обычное слияние совпадений, используя сортировки proc и шаг данных. Вот исходный код:Ошибка Hash Merge в SAS

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; 

Однако я получаю сообщение об ошибке в моем журнале говоря

ERROR: Type mismatch for method parameter 1 at line 404 column 5. ERROR: Expecting Character type. ERROR: DATA STEP Component Object failure.

Aborted during the EXECUTION phase.

Что ошибка пытается скажите мне, и как я могу исправить свой код?

Спасибо за помощь!

+0

Это может помочь: https://communities.sas .com/t5/Base-SAS- Программирование/HASH-ошибок печатать с ошибками/TD-р/161946 – superfluous

ответ

1

Key Имя переменной должно быть заключено в кавычки:

merge.definekey ('HIC') 

На другой ноте, я не уверен, что цель некоторого кода в шаге DATA (как вариант point или do петли с 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;