Hi, can I get some help on how to winsorize my data. I have total of 8 variables (for example, A-H) with 8000 observations that I have to winsorize. Thanks in advance!
Maybe this link will help:
Otherwise look at this solution and you might be able to work from there. It is not the neatest but your question is not so specific. I have used fifth and ninetyfifth percentiles and set those values to missing.
data test;
set sashelp.cars;
keep Horsepower ;
run;
proc univariate data=test noprint;
var Horsepower;
output out=percentiles p5=Horsepower_p5 p95=Horsepower_p95 ;
run;
data want;
if _n_=1 then set percentiles;
set test;
if not (Horsepower_p5 < horsepower < Horsepower_p95) then horsepower=. ;
run;
IML code:
data have;
call streaminit(1234);
do i=1 to 100;
a=ceil(rand('uniform')*100);
b=ceil(rand('uniform')*100);
output;
end;
drop i;
run;
%let low=0.05;
%let high=0.95;
proc iml;
use have;
read all var _num_ into x[c=vname];
close have;
call qntl(q,x,{&low , &high});
do i=1 to ncol(x);
x[loc(x[,i]<q[1,i]),i]=.;
x[loc(x[,i]>q[2,i]),i]=.;
end;
create want from x[c=vname];
append from x;
close want;
quit;
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.