我是SAS的新手 我有这个例子:
proc iml;
x={1 2 3 4 5 6 7 8 9};
y={2,3,5,4,8,6,4,2,2};
z={1,1,1,1,2,2,2,2,2};
data=t(x)||y||z;
print data;
run;
quit;
data
1 2 1
2 3 1
3 5 1
4 4 1
5 8 2
6 6 2
7 4 2
8 2 2
9 2 2
如何创建仅Z = 1且仅Z = 2的新数据?
谢谢。
答案 0 :(得分:3)
您可以使用loc函数对数据矩阵进行子集化。以下是从Introduction to SAS/IML中的索引矩阵中剪切的函数说明。
LOC函数通常对子集矢量和矩阵非常有用。该函数用于定位满足给定条件的元素。元素的位置以行主顺序返回。对于向量,这只是元素的位置。对于矩阵,通常需要一些操作以便将LOC函数的结果用作索引。该函数的语法是:
matrix2=LOC(matrix1=value);
应用于您的示例:
proc iml;
x={1 2 3 4 5 6 7 8 9};
y={2,3,5,4,8,6,4,2,2};
z={1,1,1,1,2,2,2,2,2};
data=t(x)||y||z;
print data;
z1rows=loc(data[,3]= 1);
z1=data[z1rows,];
print z1;
z2rows=loc(data[,3]= 2);
z2=data[z2rows,];
print z2;
run;
quit;
print z1;
+------------+
| z1 |
+---+----+---+
| 1 | 2 | 1 |
| 2 | 3 | 1 |
| 3 | 5 | 1 |
| 4 | 4 | 1 |
+---+----+---+
print z2;
+------------+
| z2 |
+---+----+---+
| 5 | 8 | 2 |
| 6 | 6 | 2 |
| 7 | 4 | 2 |
| 8 | 2 | 2 |
| 9 | 2 | 2 |
+---+----+---+