- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I have a matrix, x, that is numeric and 49X47. The second row contains all missing values. I would like to reshape it to a square matrix that is 47x47 by eliminating the first and second rows.
The SHAPE function isn't working:
x2=shape(x,3:49,47);
I'm getting execution errors telling me that the "argument should be a scalar."
How do I resolve this?
Thank you.
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The documentation for the SHAPE function specifies that the second argument should be the number of columns in the result matrix. You are sending in a vector, which is why you are getting an error.
First use the subscript operator to extract the nonmissing rows, then reshape:
x2 = shape( x[3:49, ], 47 );
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The documentation for the SHAPE function specifies that the second argument should be the number of columns in the result matrix. You are sending in a vector, which is why you are getting an error.
First use the subscript operator to extract the nonmissing rows, then reshape:
x2 = shape( x[3:49, ], 47 );
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I think the subscript operator alone is suficient here. The shape function does nothing as the reduced matrix already has 47 rows and 47 columns.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
That specification of the Shape function worked. When I print the resulting matrix within IML, it is square. However, when I create output containing that matrix, the output resolves to a vector:
Vec2 = the resulting square matrix
create Outputx var {Vec2};
append;
close Outputx;
run;*end Proc IML;
Outputx contains a single column with nxn rows.
Why does Outputx not contain the square matrix Vec2?
Thank you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Why does Outputx not contain the square matrix Vec2?
Because you are using the VAR clause in the CREATE statement. Use the FROM clause to write a matrix, as discussed in the article "Writing data from a matrix to a SAS data set."