@RichardDeVen
Richard,
I've just realised that for this task you need no more than 1 hash table (or 1 array)
proc format;
invalue primes
'02' = 2
'05' = 5
other = 1
;
run;
data _null_;
if 0 then set have;
declare hash obs(hashexp:20);
obs.defineKey("ENum");
obs.defineData("ENum","INT");
obs.defineDone();
do until (EOF);
set have end = eof;
where observerID in ('02', '05');
if obs.find() NE 0 then
INT = input(observerID, primes.);
else
INT = INT * input(observerID, primes.);
_N_ = obs.replace();
end;
/* if INT is divisible by 10 then ENum was observed by 02 nad 05*/
obs.output(dataset:'want(where=( mod(INT, 10) = 0 ))');
stop;
run;
%let range = 9;
data want;
array obs[&range.] _temporary_;
do ENum = 1 to &range.;
obs[ENum] = 1;
end;
do until (EOF);
set have end = eof;
where observerID in ('02', '05');
obs[ENum] = obs[ENum] * input(observerID, primes.);
end;
do ENum = 1 to &range.;
if mod(obs[ENum], 10) = 0 then output;
end;
keep ENum;
run;
All the best
Bart
... View more