BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
ss59
Obsidian | Level 7

I have the following code that perfectly works:

 

proc iml;
a = {1,2,3,4,0};
b = {1 1, 1 2, 2 3,3 1, 2 2};
c = a||b;
d = full(c);
print a,b,c,d;
quit;

Now, I'm trying to the same thing with one row of my data but getting errors. My code is:

 

proc iml;
  use test(keep = TR_:);
  read all var _num_ into x [colname=vn];
  b = t(scan(compress(vn,'S'),2,'t_') // scan(compress(vn,'S'),3,'t_'));
  a = t(x);
  c = a||b;
  d = full(c);
  print x, a, b, c, d;
quit;

I can't somehow get the matrix 'c' correctly, it is throwing some error. Can anyone please point out where I'm going wrong?

 

The test file is following:

YearSegment1TR_S6_S5TR_S7_S5TR_S6_S7TR_S7_S6TR_S7_S8TR_S6_S8TR_S3_S1TR_S2_S1TR_S2_S3TR_S3_S2TR_S3_S4TR_S2_S4TR_S6_S2TR_S7_S3TR_S5_S1TR_S8_S4TR_S2_S6TR_S3_S7
2017ABC0.0010.3000.020000000000000
1 ACCEPTED SOLUTION

Accepted Solutions
ss59
Obsidian | Level 7

Got it. The reason was actually the fact that I didn't do num(scan(compress(vn,'S'),2,'t_')) so b was character matrix in disguise of numeric.

 

Following code works:

 

proc iml;
  use test(keep = TR_:);
  read all var _num_ into x [colname=vn];
  b = t(num(scan(compress(vn,'S'),2,'t_')) // num(scan(compress(vn,'S'),3,'t_')));
  a = t(x);
  c = a||b;
  d = full(c);
  print x, a, b, c, d;
quit;

 

 

View solution in original post

3 REPLIES 3
ballardw
Super User

Paste the code and messages from the Log into a code box opened with the forum {I} menu icon.

 

 

 

ss59
Obsidian | Level 7

Got it. The reason was actually the fact that I didn't do num(scan(compress(vn,'S'),2,'t_')) so b was character matrix in disguise of numeric.

 

Following code works:

 

proc iml;
  use test(keep = TR_:);
  read all var _num_ into x [colname=vn];
  b = t(num(scan(compress(vn,'S'),2,'t_')) // num(scan(compress(vn,'S'),3,'t_')));
  a = t(x);
  c = a||b;
  d = full(c);
  print x, a, b, c, d;
quit;

 

 

PeterClemmensen
Tourmaline | Level 20

@ss59 glad you found your answer 🙂

 

1 small thing that itches every IML programmer about this code is that you should always remember to close your data sets when you are done reading from them. So add a

 

close test;

statement after your read statement.

 

For a (5) reason(s) why, read Five Reasons to CLOSE Your Data Sets

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 3 replies
  • 1721 views
  • 3 likes
  • 3 in conversation