Statistical programming, matrix languages, and more

How to find the location of miss value in a matrix?

Reply
Contributor
Posts: 22

How to find the location of miss value in a matrix?

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?

SAS Super FREQ
Posts: 3,390

Re: How to find the location of miss value in a matrix?

proc iml;

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

idx = loc(A=.);

A[idx] = 0;

Contributor
Posts: 22

Re: How to find the location of miss value in a matrix?

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

Grand Advisor
Posts: 17,313

Re: How to find the location of miss value in a matrix?

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
Contributor
Posts: 22

Re: How to find the location of miss value in a matrix?

I get it. Thanks a lot!

  Steve

SAS Super FREQ
Posts: 3,390

Re: How to find the location of miss value in a matrix?

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.

Contributor
Posts: 22

Re: How to find the location of miss value in a matrix?

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:

SAS Super FREQ
Posts: 3,390

Re: How to find the location of miss value in a matrix?

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

Ask a Question
Discussion stats
  • 7 replies
  • 519 views
  • 0 likes
  • 3 in conversation