Bonjour,

Afin de ne plus tourner en rond, il faudrait nous fournir la proc contents et un extrait de ta table et s'assurer que les années sont bien sur 4 caractères ou sur 2 caractères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
proc contents data = sasuser.patient ; run  ;
proc print data = sasuser.patient (obs=100) ; run ;
En attendant, pour ne conserver que les caractères "chiffre", il suffit de le demander à la fonction compress comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DATA test (label="Jeu d'essai") ;
   input code_malade date_maladie $ ;
   cards ;
1  01012007
2  --072008
3  --2008
4  31102008
5  31122008
;
run ;
DATA resultat (keep=code_malade date_maladie date_test label=Séléction des dates comprises entre 15/06/2008 et 31/10/2008) ;
   SET test  ;
   format date_test ddmmyy10. ; /* Format d'affichage */
   date_modifiee = reverse('1506'||compress(date_maladie,'0123456789','k')) ; /* Forcer le jour et le mois à 1506 : 15 juin pour être dans la période... */
   date_modifiee = reverse(substr(date_modifiee,1,8)) ; /* Extraire les 8 derniers caractères */
   date_test = input(date_modifiee,ddmmyy8.) ; /* Transformation en VRAIE date SAS */
   IF date_test >= "15jun2008"d AND date_test <= "31oct2008"d ; /* Sélection sur date_test */
run ;
Bon courage !