First count how many observations you have for each occupation, then read data skipping the last observations.
Anyway I'm not sure this is the most statistically-reliable way to filter outlier ; you'd better consider the values distribution to find a "gap" where to put a cutoff for each occupation, rather than deciding that some x % of data is "false". But this would require a lot more time than running something like :
PROC SQL ;
CREATE TABLE work.incomes AS
SELECT *,
COUNT(*) AS obsNb
FROM yourDataSet
GROUP BY occupation
ORDER BY occupation, income
;
QUIT ;
DATA work.incomes ;
SET work.incomes ;
BY occupation ;
IF FIRST.occupation THEN currNb = 0 ;
currNb + 1 ;
IF currNb <= obsNb*.99 THEN OUTPUT ;
RUN ;