我有一个包含一列(城市)的table1,我有一个第二个表(table2),它有两列(城市,距离),
我正在尝试创建第三个表,表3,此表包含两列(城市,距离),表3中的城市将来自table1中的城市列,距离将是table2中的相应距离。
我尝试使用基于Joe的建议的Proc IML这样做,这就是我所拥有的。
proc iml;
use Table1;
read all var _CHAR_ into Var2 ;
use Table2;
read all var _NUM_ into Var4;
read all var _CHAR_ into Var5;
do i=1 to nrow(Var2);
do j=1 to nrow(Var5);
if Var2[i,1] = Var5[j,1] then
x[i] = Var4[i];
end;
create Table3 from x;
append from x;
close Table3 ;
quit;
我收到错误,矩阵x尚未设置为值。有人可以帮帮我吗提前谢谢。
答案 0 :(得分:4)
您要使用的技术称为"unique-loc technique"。它使您能够循环分类变量的唯一值(在本例中为唯一城市)并为每个值执行某些操作(在这种情况下,将距离复制到另一个数组中)。
所以其他人可以重新提出这个想法,我已经将数据直接嵌入到程序中:
T1_City = {"Gould","Boise City","Felt","Gould","Gould"};
T2_City = {"Gould","Boise City","Felt"};
T2_Dist = {10, 15, 12};
T1_Dist = j(nrow(T1_City),1,.); /* allocate vector for results */
do i = 1 to nrow(T2_City);
idx = loc(T1_City = T2_City[i]);
if ncol(idx)>0 then
T1_Dist[idx] = T2_Dist[i];
end;
print T1_City T1_Dist;
IF-THEN语句用于防止Table2中的城市不在Table1中。你可以阅读why it is important to use that IF-THEN statement。如果Table2包含Table1城市的所有唯一元素,则不需要IF-THEN语句。
我的书Statistical Programming with SAS/IML Software中讨论并广泛使用了这种技术。
答案 1 :(得分:0)
您需要一个嵌套循环,或者使用在另一个矩阵中查找值的函数。
IE:
do i = 1 to nrow(table1);
do j = 1 to nrow(table2);
...
end;
end;