Good morning. I would like to get a lower processing time with the use of hashes than the base sas code for a sort operation. I have used 2 different hashcodes but the processing times compared to sas base are always higher. Someone can help me? Here is my example:
%let righe = 26500000 ;
%let colonne = 10;
data work.tab1 ( keep = keyvar large: ) ;
array keys(1: &colonne) $1 _temporary_;
length keyvar 8;
array largevar [&colonne];
retain largevar 55;
do _i_ = 1 to &righe;
keyvar = ceil (ranuni(1) * &righe);
do j=1 to &colonne;
largevar [j] = floor(round(rand("Uniform")*10,0.01));
end;
output ;
end;
run;
/* sort sas */
proc sort data=tab1 out=ok_sort2;
by keyvar largevar1 largevar2 largevar3 ;
run;
/* hash sort 1 */
data ok_sort1;
if 0 then set tab1;
declare hash sortha(dataset: 'tab1', ordered: 'a', multidata:'y');
declare hiter iter('sortha');
rc=sortha.definekey ("keyvar", "largevar1", "largevar2","largevar3");
rc=sortha.defineData("keyvar", "largevar1", "largevar2","largevar3","largevar4","largevar5","largevar6","largevar7","largevar8","largevar9");
rc=sortha.definedone();
do while ( rc = 0 );
rc = iter.prev(); if rc=0 then output ok_sort1;
end;
stop;
run;
/* hash sort 2 */
data _null_;
if 0 then set tab1;
declare hash sortha(dataset: 'tab1', ordered:'d', multidata:'y');
sortha.definekey ("keyvar", "largevar1", "largevar2","largevar3");
sortha.defineData(all:'yes');
sortha.definedone();
sortha.output(dataset:'ok_sort1');
stop;
run;
... View more