我正在使用哈希表查找值并确定是否存在匹配项。这些是测试代码。
我要做的是检查HMONITOR
中的学生是否在HDC
中有条目;如果学生在roster
中有条目,则将grade_roster
附加到一个新数据集,该数据集是grade_roster
的重复项。
grade_on_report
是我的关键,成绩是价值观。一个名称可能具有多个等级,即单个键的多值。我可以使用roster
在name
中找到roster
中具有匹配项的所有名称,但无法为新数据集附加正确的等级。
似乎每次调用grade_roster
时,键的值都被设置为列表中的下一项,因此将该值分配给所有先前的键。
这是我的代码:
find_next()
我得到的是这个
find_next()
我想要的是:
data roster;
input name $ course $ grade_on_paper $;
datalines;
Mary English A
Mary German B
Josh English B
Lily Spanish B
Lucy Physics C
John Music A
Eric Math A
Eric Music B
;
run;
data grade_roster;
input name $ course $ grade_on_report $;
datalines;
Mary English A
Mary German B
John Music A
Eric Math A
Eric Music B
;
run;
data assign_grade;
set roster;
format grade_on_report $1.;
declare hash ht1(dataset:"grade_roster", multidata:"Y");
ht1.defineKey("name");
ht1.defineData("grade_on_report");
ht1.defineDone();
rc = ht1.find();
do while(rc = 0);
rc = ht1.find_next();
end;
run;
注意: name course grade_on_paper grade_on_report name_found
1 Mary English A B Y
2 Mary German B B Y
3 Josh English B
4 Lily Spanish B
5 Lucy Physics C
6 John Music A A Y
7 Eric Math A B Y
8 Eric Music B B Y
和 name course grade_on_paper grade_on_report name_found
1 Mary English A A Y
2 Mary German B B Y
3 Josh English B
4 Lily Spanish B
5 Lucy Physics C
6 John Music A A Y
7 Eric Math A A Y
8 Eric Music B B Y
一起不是唯一的标识符。看来它们是此特定测试代码中的唯一标识符,但它们并不是我正在处理的实际数据集中的唯一标识符。目标是使用name
作为course
中的唯一键并获得正确的结果。
任何帮助将不胜感激。谢谢!