Hello Experts, When I create a hash table, I have to specify the key value, but if I want to replace the key value with a new variable created during the hash iterator process within the same data step. How do I do that? For the code below, I want the dataset work.temp1(highlighted in red) to be created before it hold by "mylittlehash1" ,how do I achieve that? My goal is to use one single datastep (with hash) to complete the task as shown in the code below. data work.temp1 work.temp2; attrib filename length=$1000 sfname length=$1000 key length=$1000; if _n_=1 then do; declare hash mylittlehash(dataset: 'library.want', ordered:'yes'); declare hiter mylittlehashter('mylittlehash'); mylittlehash.defineData('filename'); mylittlehash.defineKey('sfname'); mylittlehash.defineDone(); call missing(filename,sfname,key); end; rc=mylittlehashter.first(); do until (rc ne 0); perlexpression2=prxparse("/\w*(\w\w\d\d\d\d)(\w)\w*/"); if prxmatch(perlexpression2,filename) then do; Key=upcase((prxposn(perlexpression2,1,filename))); output work.temp1; rc=mylittlehashter.next(); end; end; declare hash mylittlehash1(dataset: 'work.temp1', ordered:'yes', duplicate: 'r'); mylittlehash1.defineKey('key'); mylittlehash1.defineData('key'); mylittlehash1.defineDone(); end; set files_found; perlexpression=prxparse("/\w*(\w\w\d\d\d\d)(\w)\w*/"); if prxmatch(perlexpression,filename) then do; Key=upcase((prxposn(perlexpression,1,filename))); end; if prxposn(perlexpression,2,filename)="Z"; rc=mylittlehash1.check(); if rc=0 then output work.temp2; run; Thanks
... View more