我是 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 创建新数据?
谢谢你。
您可以使用 loc 函数对数据矩阵进行子集化。以下是函数的描述,摘自Introduction to SAS/IML中的 Indexing matrices 。
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 |
+---+----+---+