使用 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;
我有一个可以用下面的代码生成的数据集。
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;