Date: Fri, 2 Sep 2011 18:26:08 +0000
Reply-To: "DUELL, BOB" <bd9439@ATT.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: "DUELL, BOB" <bd9439@ATT.COM>
Subject: Re: Octiles
In-Reply-To: <201109021811.p82FXVGG024049@waikiki.cc.uga.edu>
Content-Type: text/plain; charset="us-ascii"
Good example, but why not use the RANKS statement and avoid the extra data step (merging into b)?
proc rank data=a out=quantiles groups=8;
ranks qntl;
var x;
run;
Just askin'!
Bob
-----Original Message-----
From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of Rick Wicklin
Sent: Friday, September 02, 2011 11:12 AM
To: SAS-L@LISTSERV.UGA.EDU
Subject: Re: Octiles
Exactly right. (In general, the "octals" are called "quantiles".) Use the
GROUPS=8 option, then sort by the quantiles and do a BY group analysis
with PROC MEANS. The "gotcha" is you have to rename the quantiles:
data a;
do i=1 to 100;
x=rand("uniform");output;
end;
run;
proc rank data=a out=quantiles groups=8;
var x; run;
data b;
merge a quantiles(rename=(x=qntl));
label qntl = "Quantile";
run;
proc print data=b;run;
proc sort data=b; by qntl; run;
proc means data=b N Min Median Max;
by qntl; var x; run;
Rick Wicklin
SAS/IML blog http://blogs.sas.com/content/iml