OPTIONS NODATE NONUMBER PS=60 LS=64; DATA in; DO b = 'B1' , 'B2'; DO a = 'A1' , 'A2' , 'A3'; DO c = 'LO' , 'HI'; DO rep = 1 TO 2; y = 100 + 15*RANNOR(890248); y = ROUND(y,.01); OUTPUT; END; END; END; END; PROC PRINT DATA=in; TITLE 'UNSORTED DATA'; ******************************************; ** FIRST AND LAST FOR A SINGLE VARIABLE **; ******************************************; PROC SORT DATA=in; BY a; PROC PRINT DATA=in; ID a b c; TITLE 'DATA SORTED BY LEVELS OF a'; DATA in1 in2; SET in; BY a; IF FIRST.a THEN OUTPUT in1; IF LAST.a THEN OUTPUT in2; PROC PRINT DATA=in1; TITLE 'FIRST OBS FOR LEVEL OF a'; PROC PRINT DATA=in2; TITLE 'LAST OBS FOR LEVEL OF a'; **************************************; ** FIRST AND LAST FOR TWO VARIABLES **; **************************************; PROC SORT DATA=in; BY a b; PROC PRINT DATA=in; ID a b c; TITLE 'DATA SORTED BY a THEN b'; DATA in3 in4 in5 in6; SET in; BY a b; IF FIRST.a THEN OUTPUT in3; IF LAST.a THEN OUTPUT in4; IF FIRST.b THEN OUTPUT in5; IF LAST.b THEN OUTPUT in6; PROC PRINT DATA=in3; TITLE 'FIRST a OBS WHEN SORTED BY a THEN b'; PROC PRINT DATA=in4; TITLE 'LAST a OBS WHEN SORTED BY a THEN b'; PROC PRINT DATA=in5; TITLE 'FIRST b OBS WHEN SORTED BY a THEN b'; PROC PRINT DATA=in6; TITLE 'LAST b OBS WHEN SORTED BY a THEN b'; ****************************************; ** FIRST AND LAST FOR THREE VARIABLES **; ****************************************; PROC SORT DATA=in; BY a b c; PROC PRINT DATA=in; ID a b c; TITLE 'DATA SORTED BY a THEN b THEN c'; DATA in7 in8 in9 in10 in11 in12; SET in; BY a b c; IF FIRST.a THEN OUTPUT in7; IF LAST.a THEN OUTPUT in8; IF FIRST.b THEN OUTPUT in9; IF LAST.b THEN OUTPUT in10; IF FIRST.c THEN OUTPUT in11; IF LAST.c THEN OUTPUT in12; PROC PRINT DATA=in7; TITLE 'FIRST a OBS (SORTED BY a THEN b THEN c)'; PROC PRINT DATA=in8; TITLE 'LAST a OBS (SORTED BY a THEN b THEN c)'; PROC PRINT DATA=in9; TITLE 'FIRST b OBS (SORTED BY a THEN b THEN c)'; PROC PRINT DATA=in10; TITLE 'LAST b OBS (SORTED BY a THEN b THEN c)'; PROC PRINT DATA=in11; TITLE 'FIRST c OBS (SORTED BY a THEN b THEN c)'; PROC PRINT DATA=in12; TITLE 'LAST c OBS (SORTED BY a THEN b THEN c)'; RUN;