YMMV, но использование заполнения пустой хеш-таблицы значениями уникальных ключей может работать лучше, чем сортировка.
Создайте некоторые примеры данных:
data x;
do cnt=1 to 10*100000;
var=round(rand('uniform'),0.001);
do cnt2=1 to 10;
output;
end;
drop cnt2;
end;
run;
Скорость теста с proc sort
:
proc sort data=x(keep=var) out=sorted nodupkey;
by var;
run;
Сравнение с версией хеш-таблицы:
data _null_;
set x(keep=var) end=eof;
if _n_ eq 1 then do;
declare hash ht ();
rc = ht.DefineKey ('var');
rc = ht.DefineDone ();
end;
if ht.check() ne 0 then do;
rc = ht.add();
end;
if eof then do;
ht.output(dataset:"ids");
end;
run;
Из моих очень коротких тестов я обнаружил, что версия хеш-таблицы начинает работать хуже с ростом числа уникальных значений,Может быть возможно компенсировать это, предварительно определив размер хэша, но я не проверял.