SAS哈希表-单键和find_next的多值

时间:2019-06-05 00:32:15

标签: hash sas key hashtable key-value

我正在使用哈希表查找值并确定是否存在匹配项。这些是测试代码。

我要做的是检查HMONITOR中的学生是否在HDC中有条目;如果学生在roster中有条目,则将grade_roster附加到一个新数据集,该数据集是grade_roster的重复项。

grade_on_report是我的关键,成绩是价值观。一个名称可能具有多个等级,即单个键的多值。我可以使用rostername中找到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中的唯一键并获得正确的结果。

任何帮助将不胜感激。谢谢!

0 个答案:

没有答案