从旧的SAS获取新数据

时间:2015-03-13 09:47:44

标签: 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的新数据?

谢谢。

1 个答案:

答案 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 |
+---+----+---+