Replace the sections in RED. You need to provide the data set name and the variable list to the proc means. In the data step at the bottom, make sure to also specify the dataset to be capped. The rest of the code is run as is.
*Calculate IQR and first/third quartiles; proc means data=[YOUR DATA SET NAME] stackods n qrange p1 p99; var [YOUR VARIABLE LIST GOES HERE]; ods output summary=ranges; run;
*macro to cap outliers, run the rest as is
%macro cap(dset=,var=, lower=, upper=);
data &dset; set &dset; if &var>&upper then &var=&upper; if &var<&lower then &var=&lower; run;
%mend;
*create cutoffs and execute macro for each variable; data cutoffs; set ranges; lower=p1; upper=p99; string = catt('%cap(dset=[Your Dataset Name], var=', variable, ", lower=", lower, ", upper=", upper ,");"); call execute(string); run;
... View more