@npr
You can get the minimum of X and Y externally using ProcSQL. Then you can replace the original X and Y by min X and min Y in a Data Step. Assumed your input data is named as HAVE.
proc sql noprint;
select min(X), min(Y) into :minX, :minY
from have
;
quit;
%put &minX;
%put &minY;
data want;
set have;
X = &minX;
Y = &minY;
run;
Another way is to use a single Data step. In the first part you can get the minimum of X and minimum of Y and in the second part the original X and Y are replaced by the corresponding minimum values of X and Y.
data want;
if _n_ = 1 then do until(eof);
set have end = eof;
if not missing(X) then minX = min(minX, X);
minY = min(minY, Y);
end;
retain minX minY;
set have;
X = minX;
Y = minY;
drop minX minY;
run;