Если у вас есть ключи, которые повторяются, и спутниковые данные, которых нет (эти элементы #), строка, которая заканчивается в наборе результатов, будет произвольной. Proc SQL
имеет удобную функцию для автоматического повторения сводной статистики, а недокументированная функция monotonic()
может использоваться для дискретизации повторяющихся ключевых строк (включая полностью идентичные строки), которые затем могут быть использованы для использования в предложении having
.
Этот пример кода создает некоторые данные с повторяющимися ключами, а также несколько идентичных строк.
data have;
do _n_ = 1 to 1000;
key1 = ceil (10 * ranuni(123));
key2 = ceil (10 * ranuni(123));
key3 = ceil (10 * ranuni(123));
sat1 = 100 + ceil (4 * ranuni(123));
sat2 = 100 + ceil (4 * ranuni(123));
output;
end;
run;
proc sql;
* result set for distinct rows -- some key repetition still present;
create table distinct_all as
select distinct * from have
;
* result set for distinct keys -- fewer than distinct rows;
create table keys as
select distinct key1,key2,key3 from have
;
* result for distinct keys with an arbitrary row amongst the repeateds;
create table distinct_key_arb_sat(drop=seq) as
select key1, key2, key3, sat1, sat2, monotonic() as seq
from have
group by key1, key2, key3
having seq = min(seq)
;