Find a maximum/minimum/average of ordered sequencing obs within a group with SQL. For maximum/average one just needs to replace min with max/mean function.
data test;
RETAIN G ' ';
input x1 $ x2;
IF G NE X1 THEN DO;
G=X1;
ID=0;
END;
ID+1;
datalines;
01 1
01 2
01 1
01 4
01 5
02 1
02 -3
02 3
02 4
02 5
;
PROC SQL;
SELECT DISTINCT A.X1, A.ID ,A.X2, MIN(B.X2) AS MIN
FROM TEST AS A
JOIN TEST AS B
ON
A.X1=B.X1
AND
(A.ID-B.ID= 0 OR A.ID-B.ID= 1 OR A.ID-B.ID= 2)
GROUP BY A.X1, A.ID
ORDER BY A.X1, A.ID
;
QUIT;