Here's some code that I have written to do what you are talking about.
Where DPATTERN is a variable passed in from a panel I display before this processing. This will load the dataset names into a table (that you can then use). It skips over GDG bases and Alaises (but you can change that if you want).
"LMDINIT LISTID(LISTID) LEVEL("DPATTERN"

"
L_RC = RC
IF L_RC > 0 THEN DO
ZEDSMSG = ""
SELECT
WHEN L_RC = 8 THEN
ZEDLMSG = "LISTID NOT CREATED FOR" DPATTERN
WHEN L_RC = 12 THEN
ZEDLMSG = "INVALID HIGH LEVEL QUALIFIER:" DPATTERN
WHEN L_RC = 16 THEN
ZEDLMSG = "TRUNCATION OR TRANSLATION ERROR IN DIALOG VARIABLES."
WHEN L_RC = 20 THEN
ZEDLMSG = "SEVERE ERROR IN ISPF PROCESSING"
OTHERWISE
ZEDLMSG = "UNKNOWN ERROR IN LMDINIT"
END
ZEDSMSG = ""
"SETMSG MSG(ISRZ000)"
END
ADDRESS ISPEXEC
"TBCREATE " T_NAM " NAMES(DSNAME) NOWRITE"
DSNAME = " "
DO UNTIL RC > 0
"LMDLIST LISTID("LISTID"

DATASET(DSNAME) OPTION(LIST) STATS(YES)"
IF RC = 0 THEN DO
IF (ZDLVOL = "*ALIAS"

| (ZDLVOL = "??????"

THEN
ITERATE
"TBADD" T_NAM /* ADD TO TABLE */
GOT_ONE = 1
END
END
Hope this helps!
-J.D. Hill
TARPA