Is SAS's hash iterator object's setcur() method faster than a hash object's find_next() method when extracting multiple values from a key value? In code below, 5 million rows were created for key values 'A', 'B' and 'C' then the 'B' value was searched and extracted.
It turns out the hash object's find_next() method is about 25% faster than the iterator's setcur() method.
data input ;
length
key $1
sat 5 ;
do key = 'A', 'B', 'C' ;
do sat = 1 to 5000000 ;
output ;
end ;
end ;
run ;
data
xiterator( keep = key sat )
xhash( keep = key sat ) ;
if 0 then set input ;
dcl hash hh( dataset: 'input', ordered: 'a', multidata: 'y' ) ;
dcl hiter hi( 'hh' ) ;
hh.definekey( 'key' ) ;
hh.definedata( 'key', 'sat' ) ;
hh.definedone() ;
findthis = 'B' ;
temp_start = datetime() ;
do rc = hi.setcur( key: findthis ) by 0 while( rc = 0 and key = findthis ) ;
output xiterator ;
rc = hi.next() ;
end ;
temp_end = datetime() - temp_start ;
put temp_end time10.4 ;
temp_start = datetime() ;
do rc = hh.find( key: findthis ) by 0 while( rc = 0 ) ;
output xhash ;
rc = hh.find_next() ;
end ;
temp_end = datetime() - temp_start ;
put temp_end time10.4 ;
stop ;
run ;
For more information, read this excellent paper on Hash Objects: Black Belt Hashigana
No comments:
Post a Comment