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.
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.
Ready to level-up your skills? Choose your own adventure.