Как сказал пользователь 667489 в комментариях, это не простая проблема. Для небольшого количества значений вы можете попробовать следующий подход:
data test;
do i= 1 to 20;
b=int(abs(rand('norm', 0, 1)) * 10);
output;
end;
run;
proc transpose data = test out = testFormatted prefix=b;
id i;
var b;
run;
data _null_;
set testFormatted;
array values [*] b:;
numValues = dim(values);
length workingComb $32676;
do k = 1 to numValues;
combNum = comb(numValues, k);
do i = 1 to combNum;
rc=lexComb(i, k, of values[*]);
result = 0;
workingComb = '';
do j = 1 to k;
result = result + values[j];
end;
if result = 100 then do;
do m = 1 to k;
workingComb = catx(' ', workingComb, put(values[m],best.));
end;
put 'Combination found: ' rc= k= workingComb= result=;
output;
end;
end;
end;
run;