1

这个问题是我之前的问题的后续问题。除了使用散列对象进行合并之外,在同一个数据库中进行查找时,我还在努力使用散列对象。我有这个数据库,其中有order_number一个客户端的持续更新:

Client Order_number New_number
XYZ    1000         1001
       1001         1002
ABC    1006         1009
       1009         1017
SST    1010         1011
       1017         1020
       1020         1030
       1011         1050 

与我之前的问题类似,我需要以下内容:

Client Order_number New_number
XYZ    1000         1001
XYZ    1001         1002
ABC    1006         1009
ABC    1009         1017
SST    1010         1011
ABC    1017         1020
ABC    1020         1030
SST    1011         1050 

换句话说,当客户端名称丢失时,我使用 order_number 与以前的 new_number 匹配来查找客户端。订单首先按 排序order_number,然后按 排序new_number

我正在尝试通过对上一个问题中发布的代码进行一些更改来实现代码,但没有成功。

4

1 回答 1

3

如果您的数据是 SAS 数据集,这应该可以工作。此示例重写到现有数据集。所做的是过滤所有已知客户端的观察结果,然后在客户端为空时使用散列遍历订单号链。

data orders (keep=c o n rename=(c=client o=order_number n=new_number));
 length client $8 order_number 8 new_number 8;
 * declare hash object;
 if _n_ = 1 then do;
  declare hash h(dataset:'orders');
  h.definekey('order_number');
  h.definedata('client','new_number');
  h.definedone();
  call missing(client, order_number, new_number);
 end;
 * set statement with rename of original column names;
 set orders (rename=(order_number=o new_number=n client=c) where=(c ne ''));
 * find in hash ;
 rc = h.find(key:n);
 * write first observation;
 output;
 * do loop through chain of order numbers while client is empty;
 do while (rc = 0 and client = '');
  * update values of output dataset;
  o = n;
  n = new_number;
  rc = h.find(key:n);
  * write current observation;
  output;
 end;
run;
于 2013-10-04T06:40:54.983 回答