Pour des classifications basées sur de nombreuses plages de valeurs (comme les tranches d'âge), vous pouvez simplifier votre code en utilisant la fonction PUT avec un format utilisateur (PROC FORMAT). Cela rendrait votre DATA Step beaucoup plus lisible et permettrait de réutiliser la même logique de segmentation dans d'autres programmes sans avoir à réécrire tous les IF-THEN.
Type : CREATION_INTERNE
L'exemple se base sur une table CAS 'mycaslib.creditscores'. Pour rendre l'exemple autonome, nous allons simuler cette table avec un DATA step et des datalines.
| 1 | DATA mycaslib.creditscores; |
| 2 | INPUT Age Credit_Score; |
| 3 | DATALINES; |
| 4 | 20 550 |
| 5 | 30 680 |
| 6 | 40 750 |
| 7 | 50 810 |
| 8 | 60 400 |
| 9 | 70 700 |
| 10 | 22 350 |
| 11 | 35 600 |
| 12 | 45 780 |
| 13 | 55 850 |
| 14 | 65 590 |
| 15 | ; |
| 16 | RUN; |
| 17 | |
| 18 | DATA mycaslib.creditqualify / sessref=mysession; |
| 19 | SET mycaslib.creditscores; |
| 20 | LENGTH Age_Range $8; |
| 21 | IF Age in (18, 19, 20, 21, 22, 23, 24, 25) THEN Age_Range="18-25"; |
| 22 | ELSE IF Age in (26, 27, 28, 29, 30, 31, 32, 33, 34, 35) THEN Age_Range="26-35"; |
| 23 | ELSE IF Age in (36, 37, 38, 39, 40, 41, 42, 43, 44, 45) THEN Age_Range="36-45"; |
| 24 | ELSE IF Age in (46, 47, 48, 49, 50, 51, 52, 53, 54, 55) THEN Age_Range="46-55"; |
| 25 | ELSE IF Age in (56, 57, 58, 59, 60, 61, 62, 63, 64) THEN Age_Range="56-64"; |
| 26 | ELSE IF Age>=65 THEN Age_Range="65+"; |
| 27 | |
| 28 | LENGTH FICO_Rating $12; |
| 29 | IF 300<=Credit_Score<=570 THEN FICO_Rating="Very Poor"; |
| 30 | ELSE IF 580<=Credit_Score<=669 THEN FICO_Rating="Fair"; |
| 31 | ELSE IF 670<=Credit_Score<=739 THEN FICO_Rating="Good"; |
| 32 | ELSE IF 740<=Credit_Score<=799 THEN FICO_Rating="Very Good"; |
| 33 | ELSE IF Credit_Score>=800 THEN FICO_Rating="Exceptional"; |
| 34 | |
| 35 | LENGTH Credit_Qualification $12; |
| 36 | IF Credit_Score>=740 THEN Credit_Qualification="Platinum"; |
| 37 | ELSE IF 650<=Credit_Score<=739 THEN Credit_Qualification="Gold"; |
| 38 | ELSE IF 450<=Credit_Score<=649 THEN Credit_Qualification="Secured Card"; |
| 39 | ELSE IF Credit_Score<=449 THEN Credit_Qualification="N/A"; |
| 40 | RUN; |
| 1 | |
| 2 | PROC CAS; |
| 3 | TABLE.fetch / TABLE="creditqualify" index=false; |
| 4 | QUIT; |
| 5 |