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 ;