1

我是 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 创建新数据?

谢谢你。

4

1 回答 1

3

您可以使用 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 |
+---+----+---+
于 2015-03-13T13:18:52.090 回答