Я использую хеш-таблицу для поиска значений и определения соответствия.Это коды тестирования.
Я пытаюсь проверить, есть ли у студентов в 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
вместе не являются уникальными идентификаторами.Кажется, что они являются уникальными идентификаторами в этом конкретном тестовом коде, но они не являются уникальными идентификаторами в фактическом наборе данных, над которым я работаю.Цель состоит в том, чтобы использовать name
в качестве единственного ключа в ht1.defineKey()
и получить правильный результат.
Любая помощь будет принята с благодарностью.Спасибо!