Hello,
I have a sample including the variables of Return, Earnings and Size from 1980 to 2015. I want to remove (delete) the higher and lower 1% of each variable's observations each year using SAS 9.4. however, I am not sure about the codes I should use.
can you please help me?
thanks in advance
The following delete the top and bottom 20% data for each year.
If you need 1% change GROUPS=100 and NOT IN (0 99) .
data air;
set sashelp.air;
year=year(date);
drop date;
run;
proc rank data=air out=temp groups=5;
by year;
var air;
ranks r_air;
run;
data want;
set temp;
if r_air not in (0 4);
run;
The following delete the top and bottom 20% data for each year.
If you need 1% change GROUPS=100 and NOT IN (0 99) .
data air;
set sashelp.air;
year=year(date);
drop date;
run;
proc rank data=air out=temp groups=5;
by year;
var air;
ranks r_air;
run;
data want;
set temp;
if r_air not in (0 4);
run;
@Ksharp This is a good approach. But Proc Rank only works when obersvation numbers are larger than GROUPS size. I did a draft based on the reference by @Miracle
data air;
set sashelp.retail;
rename sales=air;
drop date;
run;
proc means data=air noprint;
by year;
var air;
output out=stat
p1=p1
p99=p99;
run;
data r_air;
merge air(in=x) stat(keep=year p1 p99);
by year;
if x;
run;
data want;
set r_air;
if p1<=air<=p99;
run;
thank you all. I appreciate your help.
I tried Proc Rank and it worked.
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 the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.