BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
rbettinger
Pyrite | Level 9

Continuing the conversation re: representing an IML list structure as a matrix, how do I determine the position of the item L3_4 in the following example:

proc iml ; package load ListUtil ;
L = [ #'L1'=[ #'L1_1' = [ #'L1_2' = 'item L1_2' ] ]
    , #'L2'=[ #'L2_1' = 'item L2_1']
    , #'L3'=[ #'L3_1 '= [ #'L3_2' = [ #'L3_3' = [ #'L3_4'= 'item L3_4' ] ] ] ]
    ] ;
call struct(L) ;
call listprint( L ) ;
quit ;

If I want to delete item L$'L3'$'L3_1'$'L3_2'$'L3_3'$'L3_4', how do I use ListDeleteItem() to do this? How do I represent the position as a numeric matrix of indices or a character matrix of item names? Is my confusion due to the fact that I am trying to delete an item from a sublist? If so, how do I delete an item from a sublist?

1 ACCEPTED SOLUTION

Accepted Solutions
Rick_SAS
SAS Super FREQ

I feel like we might have had this conversation already?

Yes, I think your confusion is because you are trying to directly delete from a sublist. You can't use ListDeleteItem for that. The easiest way to delete an item from a sublist is to use ListGetSubItem with the 'd' flag:

proc iml ; package load ListUtil ;
L = [ #'L1'=[ #'L1_1' = [ #'L1_2' = 'item L1_2' ] ] ];
call struct(L) ;

item = ListGetSubItem(L, {'L1' 'L1_1' 'L1_2'}, 'd' );  /* get value; delete from the list */
free item;  /* optional: completely delete the item */
call struct(L) ;

View solution in original post

1 REPLY 1
Rick_SAS
SAS Super FREQ

I feel like we might have had this conversation already?

Yes, I think your confusion is because you are trying to directly delete from a sublist. You can't use ListDeleteItem for that. The easiest way to delete an item from a sublist is to use ListGetSubItem with the 'd' flag:

proc iml ; package load ListUtil ;
L = [ #'L1'=[ #'L1_1' = [ #'L1_2' = 'item L1_2' ] ] ];
call struct(L) ;

item = ListGetSubItem(L, {'L1' 'L1_1' 'L1_2'}, 'd' );  /* get value; delete from the list */
free item;  /* optional: completely delete the item */
call struct(L) ;

sas-innovate-2024.png

📢

ANNOUNCEMENT

The early bird rate has been extended! Register by March 18 for just $695 - $100 off the standard rate.

 

Check out the agenda and get ready for a jam-packed event featuring workshops, super demos, breakout sessions, roundtables, inspiring keynotes and incredible networking events. 

 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 1 reply
  • 210 views
  • 1 like
  • 2 in conversation