SAS выбирает записи (или столбцы), в которых значение суммируется до определенного числа - PullRequest
0 голосов
/ 30 октября 2018

У меня есть таблица, содержащая значения, подобные этому

a        b
110      1024
120      987
130      456
140      312

Возможно ли в SAS найти все комбинации переменной b, которые суммируют до определенного значения?

1 Ответ

0 голосов
/ 30 октября 2018

Как сказал пользователь 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;
...