使用 SAS 哈希在相同数据和多个变量中查找

Look-up within same data and multiple variables with SAS hash

我有一个可以用下面的代码生成的数据集。

data have;
infile DATALINES DLM='|' DSD MISSOVER ;
input (VarA VarB) ($) ord;       
datalines;
YY|PP|3             
XX|YY|2            
|XX|1             
|BB|1             
BB|AA|2             
;
run;

我正在寻找一种在 VarB 中查找 VarA 值的方法,以便我们可以创建这些记录的分组,然后进行一些条件处理以获取使用以下代码生成的数据集。

data want;
infile DATALINES DLM='|' DSD MISSOVER ;
input (VarC VarD) ($);       
datalines;
XX|PP                     
BB|AA             
;
run; 

拥有: 对于前 3 条记录,VarB 中的 XX 在具有 VarB 的 VarA 中有对应的记录 'YY'。连续地,VarB 中的 'YY' 在 VarA 中有相应的记录,其中 'PP' 作为 VarB.

想要: 前 3 条记录组的第一次出现,即 'XX' 作为 VarC,组的最后一次出现是 'PP' 作为 VarD。

如果需要进一步说明,请在评论中post。

谢谢!

如果您的实际数据与示例数据一样简单,那么使用散列对象就非常简单了。

data have;
infile DATALINES DLM='|' DSD MISSOVER ;
input (VarA VarB) ($) ord;       
datalines;
YY|PP|3 
XX|YY|2 
  |XX|1 
  |BB|1 
BB|AA|2 
;

data want(keep = VarC VarD);
   if _N_ = 1 then do;
      dcl hash h(dataset : 'have');
      h.definekey('VarA');
      h.definedata('VarB');
      h.definedone();
   end;

   set have;
   where VarA = '';

   VarC = VarB;

   do until (rc);
      rc = h.find(key : VarB);
   end;

   VarD = VarB;
run;