Hi, Thank you all for responses. @Tom's solution is very usefull but i could be done with less coding. data dates; input date ddmmyy10. number @@; format date ddmmyy10.; cards; 10-10-2011 697 10-10-2011 122 09-10-2011 607 08-10-2011 607 07-10-2011 122 07-10-2011 607 run; data trans; input number @@ ; cards; 529 122 697 607 888 run; data lookup ; if _n_=1 then do; if 0 then set dates; declare Hash H(dataset: "dates"); H.DefineKey ('number'); H.DefineData ('date'); H.DefineDone (); /* complete hash table definition */ end; set trans; if h.find() then date=.; put number= date=; run; According to the documentation (link from @Scott Bass): If the data set contains duplicate keys, by default, the first instance is stored in the hash object; subsequent instances are ignored. To store the last instancein the hash object, use the DUPLICATE argument tag. The DUPLICATE argumenttag also writes an error to the SAS log if there is a duplicate key. As I understand, during loading hash the source table is reading sequentially. Sorting before loading hash should be enough. I hope
... View more