BookmarkSubscribeRSS Feed
ShufeGuoding
Obsidian | Level 7

I want to replace missing value in a matrix A with zero and first need to find their locations in the matrix. Since function loc() treats the missing values as zero, how can I use the function to find their locations in A?

7 REPLIES 7
Rick_SAS
SAS Super FREQ

proc iml;

A = {. 2 3, 4 . 6};

idx = loc(A=.);

A[idx] = 0;

ShufeGuoding
Obsidian | Level 7

Because missing values are treated as zero, Your code seems not work properly. The problem is the same as  that I met.

Reeza
Super User

Works fine for me, idx identifies the missing as 1, 5. Next line replaces them to be 0's.

proc iml;

A = {. 2 3, 4 . 6};

idx = loc(A=.);

print idx;

A[idx] = 0;

print a;

OUTPUT:

The SAS System


15
023
406
ShufeGuoding
Obsidian | Level 7

I get it. Thanks a lot!

  Steve

Rick_SAS
SAS Super FREQ

As far as I know, missing values are not "treated as zero" anywhere in IML. You might be thinking of the behavior of an IF/THEN-ELSE statement, where a missing value in the IF conditional results in the condition evaluating to FALSE.

ShufeGuoding
Obsidian | Level 7

I was misleaded by the statements for Loc function in Usg/IML12.1 that read:

The  loc funciton finds nonzero elements of a matix. .... . Missing values treated as zeros.:smileyconfused:

Rick_SAS
SAS Super FREQ

I see.  I interpret that phrase to mean that

y = loc(x);

will produce a matrix y such that y[i,j]=0 whenever x[i,j] is zero or missing, but I see how that phrase might be confusing. To make sure you always get the correct answer, I recommend using a logical expression as the argument to the LOC function.  For example

y = loc(x^=0);

or

y = loc(x>0);

etc

sas-innovate-white.png

Missed SAS Innovate in Orlando?

Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.

 

Register now

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