Я думал, что представление может работать, но оно определенно больше проходов и определенно более неэффективно. Петля DoW, вероятно, является лучшим решением, по крайней мере, только два прохода, этот, вероятно, минимум 4 прохода! Строковые запросы определенно менее эффективны.
Интересная проблема, хотя. Может также помочь, если вы объясните какой-то контекст, возможно, есть более простой способ решить эту проблему?
proc sql;
create view test2 as select *, (select count(_a1.ID) from test as _a1 where
_a1.id=t1.id group by id) as count1, (select count(_a2.ID1) from test as _a2
where _a2.id1=t1.id1 group by id1) as count2 from test as t1 order by 1, 2;
quit;
data single multiple;
set test2;
if max(count1, count2)>1 then
output multiple;
else
output single;
run;