1

我有包含一列(城市)的 table1,我有第二个包含两列(城市,距离)的表(table2),

我正在尝试创建第三个表,表 3,该表包含两列(城市、距离),表 3 中的城市将来自表 1 中的城市列,距离将是表 2 中的相应距离。

在此处输入图像描述

我尝试根据 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 尚未设置为值。有人可以在这里帮助我吗?提前致谢。

4

2 回答 2

4

您要使用的技术称为“unique-loc 技术”。它使您能够遍历分类变量的唯一值(在本例中为唯一城市)并为每个值执行某些操作(在本例中,将距离复制到另一个数组中)。

为了让其他人可以重现这个想法,我将数据直接嵌入到程序中:

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 语句是为了防止表 2 中的城市不在表 1 中。您可以了解为什么使用 IF-THEN 语句很重要。如果 Table2 包含 Table1 城市的所有唯一元素,则不需要 IF-THEN 语句。

这种技术在我的 SAS/IML 软件统计编程一书中得到了广泛的讨论和使用。

于 2014-07-17T11:14:02.463 回答
0

您需要一个嵌套循环,或者使用在另一个矩阵中查找值的函数。

IE:

do i = 1 to nrow(table1);
  do j = 1 to nrow(table2);
...
  end;
end;
于 2014-07-17T03:52:04.190 回答