|
想到一种方法解决 ,但是感觉太麻烦了 ,不知道有没有简便的方法,希望大家有好的点子 可以分享下
proc sql;
create table leave.mnths_levae_rat as
SELECT MNTHS_flag,N_LEAVE/N_ALL AS LEAVE_RATE,N_ALL,N_LEAVE,ORD FROM
(select A.MNTHS_flag,A.OFF_FLAG AS N_ALL,B.OFF_FLAG AS N_LEAVE,
CASE
WHEN A.MNTHS_flag= '(low,2)' THEN 1
WHEN A.MNTHS_flag= '(3,5)' THEN 2
WHEN A.MNTHS_flag= '(6,10)' THEN 3
WHEN A.MNTHS_flag= '(11,16)' THEN 4
WHEN A.MNTHS_flag= '(17,24)' THEN 5
WHEN A.MNTHS_flag= '(25,33)' THEN 6
WHEN A.MNTHS_flag= '(34,48)' THEN 7
WHEN A.MNTHS_flag= '(49,75)' THEN 8
WHEN A.MNTHS_flag= '(76,103)' THEN 9
WHEN A.MNTHS_flag= '(104,high)' THEN 10
ELSE .
END AS ORD
FROM leave.mnths_toji AS A JOIN leave.mnths_toji2 AS B
ON A.MNTHS_flag=B.MNTHS_flag
WHERE A._STAT_='N' AND B._STAT_='N'
)
ORDER BY ORD
;
QUIT;
proc sort data=leave.mnths_levae_rat;
by ORD;
run;
axis1 value=none label=none;
axis2 label=(angle=90 "ONLINE TIME---- LEAVE");
axis3 label=none;
legend1 frame;
PROC GPLOT DATA=leave.mnths_levae_rat;
PLOT LEAVE_RATE*MNTHS_flag/haxis=axis1 vaxis=axis2;
SYMBOL I=JOIN C=BLUE;
axis1 label=('ONLINE_TIME') order=('(low,2)' '(3,5)' '(6,10)' '(11,16)' '(17,24)' '(25,33)' '(34,48)' '(49,75)' '(76,103)' '(104,high)');
AXIS2 LABEL=('LEAVE_RATE') ;
RUN;
|