data raw;
input ID $ VAR;
cards;
001 80
001 20
001 30
001 12
001 43
001 62
002 40
002 25
002 60
002 32
002 62
002 34
002 68
003 10
003 75
003 20
003 19
003 72
003 12
003 20
003 15
;
proc univariate data=raw noprint;
var var;
class id;
output out=temp pctlpts=25 50 75 pctlpre=p;
run;
proc sql;
create table out as
select a.*,
case
when var le p25 then 1
when p25 lt var le p50 then 2
when p50 lt var le p75 then 3
when p75 le var then 4
else .
end as TYPE
from raw a,temp b
where a.id=b.id
order by a.id,var; /*这里面包括GROUP分组逐步来CASE WHEN*/
quit;
/*其实这里学习的应该是ORDER BY */