%MACRO Utl_OptimalGainCont ( Utl_Title =Create Gaiins Chart for Continuous Response Variable, Utl_Obj =Utl_OptimalGainCont, Utl_InMem0101 =ZEROSCRX, Utl_Levels =20, /* Number of ptiles 20-> 5% ptiles */ Utl_ResponseVar=RSPINDX, Utl_Score =SCOREX, Utl_OtMem0101 =Utl_OptimalGainContChrt ) / des = "Gains Chat for Continuous Variable"; PROC SORT DATA=&Utl_InMem0101; BY DESCENDING &Utl_Score; RUN; DATA Utl_OptimalGainContChrt ( KEEP = ANALOUTL ANALOUTH ANALNUMT ANALNUMA ANALGCUM ANALPMQ ANALCPMQ ANALPACT ANALCPAC ANALGAIN ANALACUM ) ; LABEL ANALGCUM='CUM ZSAMPLE' ANALPMQ='% ZSAMPLE' ANALCPMQ='CUM % ZSAMPLE' ANALPACT='AVZRESPONSE' ANALCPAC='CUM ZAV. RESP.' ANALGAIN='PERCENTZ GAIN' ANALOUTH='HIGHESTZSCORE' ANALOUTL='LOWESTZSCORE' ANALNUMA='RESPONSE' ANALNUMT='SAMPLE' ANALACUM='CUM ZRESPONSE' ; ARRAY SCOR {&Utl_Levels}; ARRAY ALSCOR {&Utl_Levels}; ARRAY AACT {&Utl_Levels}; ARRAY ATOT {&Utl_Levels}; DO I =1 TO &Utl_Levels; AACT{I}=0; ATOT{I}=0; END; SET &Utl_InMem0101 NOBS=NOBS POINT= _N_ ; NOW_N_=1; DO I =1 TO &Utl_Levels; SCOR{I}=&Utl_Score; MAX_N_=NOBS/&Utl_Levels +NOW_N_; DO WHILE ( NOW_N_ < MAX_N_ OR OLD_SCOR=&Utl_Score ); &Utl_ResponseVar=SUM(&Utl_ResponseVar,0); &Utl_Score=SUM(&Utl_Score,0); AACT{I} + SUM(&Utl_ResponseVar,0); ATOT{I}=ATOT{I}+1; IF LAST THEN GOTO END_ANAL; OLD_SCOR=&Utl_Score; SET &Utl_InMem0101(FIRSTOBS=2) END=LAST; IF LAST THEN ALSCOR{I}=&Utl_Score; ELSE ALSCOR{I}=LAG(&Utl_Score); NOW_N_=NOW_N_+1; END; END; END_ANAL: ANALGTOT=0; ANALATOT=0; DO I=1 TO &Utl_Levels; ANALGTOT=ANALGTOT+ATOT{I}; ANALATOT=ANALATOT+AACT{I}; END; ANALWLST=(ANALATOT/ANALGTOT); ANALACUM=0; ANALGCUM=0; DO I=1 TO &Utl_Levels; ANALGCUM=ANALGCUM+ATOT{I}; ANALACUM=ANALACUM+AACT{I}; ANALPMQ= (ATOT{I}/ANALGTOT)*100; ANALCPMQ=(ANALGCUM/ANALGTOT)*100; ANALPACT=(AACT{I}/ATOT{I}); ANALCPAC=(ANALACUM/ANALGCUM); ANALGAIN=((ANALCPAC-ANALWLST)/ANALWLST)*100; ANALOUTH=SCOR{I}; ANALOUTL=ALSCOR{I}; ANALNUMT=ATOT{I}; ANALNUMA=AACT{I}; OUTPUT; END; STOP; PROC PRINT DATA=Utl_OptimalGainContChrt LABEL SPLIT='Z' ; VAR ANALGCUM ANALPMQ ANALCPMQ ANALPACT ANALCPAC ANALGAIN ANALOUTH ANALNUMT ANALNUMA ANALACUM ANALOUTL ; RUN; %MEND Utl_OptimalGainCont;