目前,在我们的DI工作室工作中,我们有几个查找。当某个记录的其中一个查找返回多个值时,查找将选择其中一个(我认为第一个)进行选择。我实际上更喜欢收到一个错误,因为对我来说这意味着查找还没有很好地定义,我可能需要添加额外的'where'表达式。
是否可以选择这样设置?我现在找不到任何东西。
答案 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的值,那么任何试图使用宏变量的可疑代码都会失败。