I am interested in parsing a module's parameters for parameter type and name. I get expected results from the type function, but the parentname function demonstrates unexpected results. Here is a test module that I have written to present my findings:
proc iml ;
start test( p1, p2, p3, p4, p5=, p6=, p7= ) ;
name1 = parentname( 'p1' ) ;
name2 = parentname( 'p2' ) ;
name3 = parentname( 'p3' ) ;
name4 = parentname( 'p4' ) ;
name5 = parentname( 'p5' ) ;
name6 = parentname( 'p6' ) ;
name7 = parentname( 'p7' ) ;
if isEmpty( p5 )
then print p1 name1 p2 name2, p3 name3 p4 name4 ;
else print p1 name1 p2 name2, p3 name3 p4 name4, p5 name5 p6 name6, p7 name7 ;
finish ;
ab = 'ab' ;
cd = 'cd' ;
ef = 'ef' ;
gg = { ab ab cd cd ef ef gg } ;
print 'Test case 1: All parameter names reported correctly.' ;
run test( ab, cd, ef, gg ) ;
print 'Test case 2: Second occurrence of duplicated names, e.g., ( ab, ab ) reported as blank',
'e.g., name[2,4] ought to be "ab", "cd" and not blank.' ;
run test( ab, ab, cd, cd ) ;
print 'Test case 3: Attempt to teach IML to report Elizabethan sonnet rhyme scheme is futile',
'e.g., name[2,4,6] are all blank and not "ab", "cd", and "ef".' ;
run test( ab, ab, cd, cd, ef, ef, gg ) ;
quit ;
Here is the output from the program:
Test case 1: All parameter names reported correctly.
p1 name1 p2 name2
ab ab cd cd
p3 name3 p4 name4
ef ef AB AB CD CD EF EF GG gg
Test case 2: Second occurrence of duplicated names, e.g., ( ab, ab ) reported as blank
e.g., name[2,4] ought to be "ab", "cd" and not blank.
p1 name1 p2 name2
ab ab ab
p3 name3 p4 name4
cd cd cd
Test case 3: Attempt to teach IML to report Elizabethan sonnet rhyme scheme is futile
e.g., name[2,4,6] are all blank and not "ab", "cd", and "ef".
p1 name1 p2 name2
ab ab ab
p3 name3 p4 name4
cd cd cd
p5 name5 p6 name6
ef ef ef
p7 name7
AB AB CD CD EF EF GG gg
Can someone explain parentname's perplexing performance?
Thanks in advance,
Ross