/***************************************************************************************************************** SAS file name: Hash_Object_Lookup File location: _________________________________________________________________________________________________________________ Purpose: To demonstrate a simple Hash Object lookup technique in SAS. Author: Peter Clemmensen Creation Date: 07/03/2018 This program supports the example page "SAS Hash Object Lookup Example" on SASnrd.com *****************************************************************************************************************/ /* Example data */ data employees(drop=i); length empid $20; array first_names{20} $15 _temporary_ ("Paul", "Allan", "Thomas", "Michael", "Chris", "David", "John", "Jerry", "James", "Robert", "William", "Richard", "Bob", "Daniel", "Paul", "George", "Larry", "Eric", "Charles", "Stephen"); array last_names{20} $15 _temporary_ ("Smith", "Johnson", "Williams", "Jones", "Brown", "Miller", "Wilson", "Moore", "Taylor", "Hall", "Anderson", "Jackson", "White", "Harris", "Martin", "Thompson", "Robinson", "Lewis", "Walker", "Allen"); call streaminit(123); do i=1 to 50e6; first_name=first_names[ceil(rand("Uniform")*20)]; last_name=last_names[ceil(rand("Uniform")*20)]; empid=compress(uuidgen(), '-'); output; end; run; proc surveyselect data=employees out=temp(keep=empid) seed=123 noprint method=srs sampsize=500000; run; data emphours; set temp; hours=round(rand('Uniform', 10, 100), 0.01); sickdays=ceil(rand("Uniform")*10); seniority=ceil(rand("Uniform")*30); run; proc datasets lib=work nolist; delete temp; run;quit; /* Hash object lookup */ data HashLookup(drop=rc); if 0 then set work.emphours; if _N_ = 1 then do; declare hash h(dataset:'work.emphours'); h.defineKey('empid'); h.defineData('hours', 'sickdays', 'seniority'); h.defineDone(); call missing(hours, sickdays, seniority); end; set Employees; rc=h.find(); run;