从旧SAS获取新数据

从旧SAS获取新数据,sas,sas-iml,Sas,Sas Iml,我是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函数对数据矩阵进

我是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函数对数据矩阵进行子集设置。以下是从中的索引矩阵剪下的函数说明

LOC函数通常对向量和矩阵的子集非常有用。此功能用于定位满足给定条件的元件。元素的位置按行主顺序返回。对于向量,这只是元素的位置。对于矩阵,为了使用LOC函数的结果作为索引,通常需要进行一些操作。函数的语法为:

适用于您的示例:

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;
打印z1的结果

+------------+
|     z1     |
+---+----+---+
| 1 |  2 | 1 |
| 2 |  3 | 1 |
| 3 |  5 | 1 |
| 4 |  4 | 1 |
+---+----+---+
打印z2的结果

+------------+
|     z2     |
+---+----+---+
| 5 |  8 | 2 |
| 6 |  6 | 2 |
| 7 |  4 | 2 |
| 8 |  2 | 2 |
| 9 |  2 | 2 |
+---+----+---+

关于LOC函数的更多示例和讨论
+------------+
|     z2     |
+---+----+---+
| 5 |  8 | 2 |
| 6 |  6 | 2 |
| 7 |  4 | 2 |
| 8 |  2 | 2 |
| 9 |  2 | 2 |
+---+----+---+