@Astounding The BY statement really slows things down. But more so for SET it seems. Without BY, SET is faster.
I suppose it's to with managing the PDV: MERGE populates it once per key value for all tables, SET populates it once per key value per table, so the underlying table-reading routine must be different. But I am only making assumptions here.
The values are CPU-bound on my server:
data BASE ;
do I=1 to 1e8;
output ;
end;
run;
sasfile BASE load;
data _null_ ;set BASE; run; * 3.8s;
data _null_ ;merge BASE; run; * 5.4s;
data _null_ ;set BASE; by I; run; * 9.5s;
data _null_ ;merge BASE; by I; run; * 9.3s;
sasfile BASE close;