SAS Data Integration Studio:如果查找返回多个值,则会出错

时间:2013-05-17 10:40:21

标签: sas data-integration

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

是否可以选择这样设置?我现在找不到任何东西。

1 个答案:

答案 0 :(得分: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的值,那么任何试图使用宏变量的可疑代码都会失败。