Этот тип логики на самом деле не поддается SQL, поскольку порядок наблюдений в действительности не застрахован. В более современной версии SQL вы можете использовать оконные функции (например, ROW_NUMBER () с PARTITION BY) для наложения количества записей.
Если вы действительно хотите попробовать сделать это только в PROC SQL, вам, возможно, придется прибегнуть к недокументированной функции MONOTONIC()
. Но даже тогда, чтобы победить оптимизатор, удалив дублирующиеся строки, вам может понадобиться создать временную таблицу со счетчиком строк.
data have;
input ID @@;
datalines;
1 2 3 3 4 5 6 6
;
proc sql ;
create table _temp_ as select id,monotonic() as row from have;
create table want as
select a.id
, b.row=min(b.row) as FLAG
from have a,_temp_ b
where a.id=b.id
group by a.id
order by 1,2
;
quit;