1

目前,在我们的 DI 工作室工作中,我们有几个查找。当某个记录的其中一个查找返回多个值时,查找将选择其中一个(我认为是第一个)进行选择。我实际上更愿意收到一个错误,因为对我来说这意味着查找尚未明确定义,我可能需要添加额外的“where”表达式。

有没有这样设置的选项?我现在找不到任何东西。

4

1 回答 1

0

如果您对宏感到满意,则一种选择可能是...

%macro get_lookup(&in_where);
    proc sql noprint;
        select
            lookup_value,
            count(lookup_value)
        into
            :l_lookup_result,
            :l_count_results
        from lookup table
        where &in_where;
    quit;

%if l_count_results = 1 %then %do;
    %global g_lookup_result;
    %let g_lookup_result = &l_lookup_result;
%end;
%else %do;
    %put ERROR: Lookup did not return expected 1 result.;
    %raise_error; 
%end;

%mend get_lookup;

%get_lookup(&where_clause);

这有点麻烦,但它会完成工作。除非它返回一个以上的值,否则它会倒下。优雅地。注意:我假设您在宏变量 &where_clause 中构建了一些与查找相关的 where 子句,然后用于填充宏参数 &in_where。我还假设您定义了一个名为 %raise_error 的宏 - 否则,如果此查找未设置 &g_lookup_result 的值,则任何尝试使用宏变量的后续代码都会失败。

于 2013-10-01T08:13:14.790 回答