Just for the H of it I did your homework assignment. Now, I'm not going to show any code, but I will discuss the method.
Input
A 32 DEKALB
B 24 NAPERVILLE
C 2 ELBURN
D 5 CHICAGO
E 90 OHIO
I removed the $ in the second column, and to simplify the code I made all three columns fixed width.
Data area definitions -
Input
IENTRY DSECT
COL1 DS CL2
COL2 DS CL3
COL3 DS CL10
Intermediate storage
SENTRY DSECT
SENEXT DS A
SCOL1 DS CL2
SCOL2 DS PL2
SCOL3 DS CL16
SESIZE EQU *-SENTRY
Since I didn't know how many input records I'd be reading, I defined them as a linked list: SENEXT points to the next entry. I also made column 2 packed decimal to simplify the compare in the sort code.
I also chose to "sort" an array of pointers.
The program reads the input data, allocates storage for each SENTRY, copies COL1 and COL3 in the input to SCOL1 and SCOL3, and converts the zoned decimal COL2 to the packed decimal SCOL2.
At the end of data, the program builds an array of pointers to each of the SENTRY DSECTs built in the input, and "sorts" the array of pointers.
After the sort, it converts each SENTRY to a print line:
E 90 OHIO
A 32 DEKALB
B 24 NAPERVILLE
D 5 CHICAGO
C 2 ELBURN