How to identify 3 most frequent responses and turn them into new variables.

#1
Hello! I have a data set of 1000 individuals (rows) and (for this example) 18 likert-scale 5-item item responses in the columns.

So the data for one person might look like this:
SubjectA1 1 1 2 1 2 3 5 3 4 1 1 1... etc.

I want to generate 6 new variables. 3 for each of the most common 3 response options selected, and 3 for the frequency that those response options were selected. The deliverable would be the ability to read across the columns and say, "Your three top response options across all 18 questions were 1, 3, and 4. You chose "1" 30% of the time, "3" 20% of the time, and "4" 15% of the time." I am going to use these newly generated variables to populate part of an mail-merge style auto-filled e-mail, so I *can not* just generate a frequency table for each participant.

I have found a working way to generate both the most frequent response (i.e. the mode) and the occurrence %, but I am at a complete loss for generating the "second most frequent" and "third most frequent" response. Any ideas? See below for existing code and code source (all credit to original author, of course).

*attempt at freq v2 - most frequent response*
*Calculate MODAL (i.e. most frequent) value across a set of variables (Coach_OU1...Coach_OU18 having values 1...5.
* Creates variable N_Mode indicating # of values tied for mode *
* Creates variable FirstMostOccur indicating # of times the mode occurs in the range *
* Creates variable FirstMostValue indicating value of the mode *
*source: http://spssx-discussion.1045642.n5....de-of-Many-Variables-td5713850.html#a5713855*.

COMPUTE FirstMostOccur=0.
DO REPEAT C=#COUNTS1 TO #COUNTS5 /Value=1 TO 5.
+ COUNT C=Coach_OU1 TO Coach_OU18 (Value).
+ DO IF C GT FirstMostOccur.
+ COMPUTE FirstMostOccur=C.
+ COMPUTE FirstMostValue=Value.
+ END IF.
END REPEAT.
DO REPEAT Value=1 TO 5.
+ DO IF FirstMostOccur=Value.
+ COUNT N_MODE=#COUNTS1 TO #COUNTS5 (Value).
+ END IF.
END REPEAT.
*FORMATS ALL (F1.0). *This seems to cause errors-PSH.
EXECUTE.

*attempt at freq v2 - most frequent response % for 18 items.
*creates variable FirstMostFreq indicating frequency (%) of mode for 18 items.

COMPUTE FirstMostFreq = SUM((FirstMostOccur/18)*100).
EXECUTE.