对于正在执行的项目,我们将两个大型数据集多次连接在一起。我们正在使用哈希联接,因为它更快。最近,我们发现HASH联接偶尔返回错误的值,但是我们真的不知道为什么。一名同事经过检查并更改了HASH中的列名,因此我们现在为返回值和HASH表中的列名使用不同的名称(而不是Liab_ILF_Factor = ROUND(LIAB_ILF_Factor,.001),我们使用的是Liab_ILF_Factor = ROUND(Liab_ILF_Fact,.001)似乎有效,但仅担心它首先发生,并想确保我们已解决了根本问题。奇怪的是,该联接似乎正确地匹配了几个字段(行业,州,重量类别,类型等),但会以1,000,000的价格拉动ILF,而不是应以250,000的价格拉动ILF。
data liabumuimilffactor (drop=liabumuimilf_factors_dte_key liabumuimilf_factor_state_join veh_wgt_class industry Limit ILF_Bucket Eff_dt Exp_Dt Created_Dt state dte_key
LIAB_ILF_Fact UM_UIM_ILF_Fact PIP_ILF_Fact);
if 0 Then Set ilf_input Liab_UM_UIM_ILF_Factor;
if _N_ = 1 then do;
Declare Hash ILF_Factor_Hash(Dataset:"Liab_UM_UIM_ILF_Factor");
ILF_Factor_Hash.DefineKey('state', 'dte_key', 'Veh_Type', 'Veh_Wgt_Class', 'Industry', 'Limit');
ILF_Factor_Hash.DefineData('ILF_Bucket', 'LIAB_ILF_Fact', 'UM_UIM_ILF_Fact', 'PIP_ILF_Fact');
ILF_Factor_Hash.DefineDone();
end;
set ilf_input;
if ILF_Factor_Hash.Find(Key:liabumuimilf_factor_state_join, Key:liabumuimilf_factors_dte_key, Key:Veh_Type, Key:Veh_Wgt_Class_Mapped, Key:IndustryGroup, Key:Liab_Limit) = 0 then do;
Liab_ILF_Factor = round(LIAB_ILF_Fact, .001);
Liab_ILF_Bucket = ILF_Bucket;
end;
else do;
Liab_ILF_Factor = .;
Liab_ILF_Bucket = "";
end;
if ILF_Factor_Hash.Find(Key:liabumuimilf_factor_state_join, Key:liabumuimilf_factors_dte_key, Key:Veh_Type, Key:Veh_Wgt_Class_Mapped, Key:IndustryGroup, Key:UM_UIM_Limit) = 0 then do;
UM_UIM_ILF_Factor = round(UM_UIM_ILF_Fact, .001);
UM_UIM_ILF_Bucket = ILF_Bucket;
end;
else do;
UM_UIM_ILF_Factor = .;
UM_UIM_ILF_Bucket = "";
end;
if ILF_Factor_Hash.Find(Key:liabumuimilf_factor_state_join, Key:liabumuimilf_factors_dte_key, Key:Veh_Type, Key:Veh_Wgt_Class_Mapped, Key:IndustryGroup, Key:PIP_Limit) = 0 then do;
PIP_ILF_Factor = round(PIP_ILF_Fact, .001);
PIP_ILF_Bucket = ILF_Bucket;
end;
else do;
PIP_ILF_Factor = .;
PIP_ILF_Bucket = "";
end;
run;