Dynamische Strukturen sind im RPG/LE leider nicht möglich.
Etwas eingeschränkt kann man es aber doch hinbekommen:

D BaseAdr * <= Pointer
D ArtSum ds dim(10000) based(BaseAdr)

Mittels %ALLOC/%REALLOC kann zur Laufzeit Speicher dem Pointer zugewiesen werden.
In den %LOOKUP-Funktionen kann die Anzahl der Elemente beschränkt werden.

Einzig der Sort funktioniert nicht.
Hier hilft ggf. das Einbinden der C-Funktion qsort().