*Hash object example; data attendance; input date mmddyy8. id; datalines; 10/27/11 1245 10/27/11 4555 10/27/11 1456 10/29/11 4567 10/29/11 1245 10/29/11 4555 10/31/11 1245 10/31/11 787 ; data workout; format name $20. date mmddyy8.; if _N_=1 then do; declare hash members(); members.definekey("id"); members.definedata("name"); members.definedone(); *SAS did not like the unassigned member 5386 in the original attendance data set; call missing(id,name); members.add(key:787,data:'Sam Crump'); members.add(key:1245,data:'Cale Johnson'); members.add(key:1456,data:'Chris Santino'); members.add(key:4555,data:'Isadore Khuryan'); members.add(key:4567,data:'Armand Cayne'); members.add(key:9877,data:'Ron cole'); end; set attendance; members.find(); run; proc print data=workout; run; *Reading a hash object from a data set; data memberdata; input name $17. id locker; datalines; Cale R. Johnson 1245 23 Ronald Cole 9877 54 K. Armand Cayne 4567 206 Samuel Crump 787 202 Isadore Khuryan 4555 87 Christian Santino 1456 27 ; data combined; if _N_=1 then do; *Unexecuted IF loads variable names into program data vector so that they are available when defining the hash object; if 0 then set memberdata; declare hash members(dataset: "memberdata"); members.definekey("id"); members.definedata("name","locker"); members.definedone(); end; set attendance; members.find(key:id); run; proc print data=combined label; label name="Name" id="Member ID" locker="Locker #" date="Date"; format date mmddyy8.; run; * Book Example; data contrib; input EmpID $ QtrNum $ Amount; datalines; E00224 qtr1 12 E00224 qtr2 33 E00224 qtr3 22 E00224 qtr4 . E00367 qtr1 35 E00367 qtr2 48 E00367 qtr3 40 E00367 qtr4 30 E00441 qtr1 . E00441 qtr2 63 ; run; data difference (drop=goalamount); length goalamount 8 QtrNum $8.; if _N_ = 1 then do; declare hash goal(); goal.definekey("QtrNum"); goal.definedata("GoalAmount"); goal.definedone(); call missing(qtrnum, goalamount); goal.add(key:'qtr1', data:10 ); goal.add(key:'qtr2', data:15 ); goal.add(key:'qtr3', data: 5 ); goal.add(key:'qtr4', data:15 ); end; set contrib; goal.find(); Diff=amount-goalamount; run; proc print data=difference; run;