Bonjour,
je ne comprend pas pourquoi mon code ne fonctionne pas, je tourne en rond et à mon avis je passe complètement à coté d'un détail!
Voici mon code :
Voici la log SAS lorsque je l’exécute la première fois :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 %let DTDB65M01 = 1 ; %let DTDB65M02 = 2 ; %let DTDB65M03 = 3 ; data tbout; set workserv.tbin; call symput("MoisRef",TRIM(PDREFEXT)); PUT "MoisRef= &MoisRef."; PUT "DTDB65&MoisRef. = &&DTDB65&MoisRef"; run;
et voici la log SAS lorsque je le ré-éxcute immédiatement après sans rien changer :
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 126 %let DTDB65M01 = 1 ; 127 %let DTDB65M02 = 2 ; 128 %let DTDB65M03 = 3 ; 129 130 131 data tbout; 132 set workserv.tbin; AVERTISSEMENT: Référence symbolique apparente MOISREF non traitée. AVERTISSEMENT: Référence symbolique apparente MOISREF non traitée. AVERTISSEMENT: Référence symbolique apparente MOISREF non traitée. AVERTISSEMENT: Référence symbolique apparente MOISREF non traitée. AVERTISSEMENT: Référence symbolique apparente DTDB65 non traitée. AVERTISSEMENT: Référence symbolique apparente MOISREF non traitée. 133 call symput("MoisRef",TRIM(PDREFEXT)); 134 PUT "MoisRef= &MoisRef."; 135 PUT "DTDB65&MoisRef. = &&DTDB65&MoisRef"; 136 run; MoisRef= &MoisRef. DTDB65&MoisRef. = &DTDB65&MoisRef MoisRef= &MoisRef. DTDB65&MoisRef. = &DTDB65&MoisRef MoisRef= &MoisRef. DTDB65&MoisRef. = &DTDB65&MoisRef MoisRef= &MoisRef. DTDB65&MoisRef. = &DTDB65&MoisRef MoisRef= &MoisRef. DTDB65&MoisRef. = &DTDB65&MoisRef NOTE: 5 observations copiées de la table WORKSERV.TBIN. NOTE: La table WORK.TBOUT a 5 observations et 30 variables. NOTE: L'étape DATA a utilisé (Durée totale du processus) : temps réel 0.45 secondes temps processeur 0.04 secondes
avec cette deuxième exécution je constate que ma macro-variable fonctionne après coup ...
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
19
20
21
22
23
24
25
26
27
28
29
30 137 138 139 %let DTDB65M01 = 1 ; 140 %let DTDB65M02 = 2 ; 141 %let DTDB65M03 = 3 ; 142 143 144 data tbout; 145 set workserv.tbin; 146 call symput("MoisRef",TRIM(PDREFEXT)); 147 PUT "MoisRef= &MoisRef."; 148 PUT "DTDB65&MoisRef. = &&DTDB65&MoisRef"; 149 run; MoisRef= M02 DTDB65M02 = 2 MoisRef= M02 DTDB65M02 = 2 MoisRef= M02 DTDB65M02 = 2 MoisRef= M02 DTDB65M02 = 2 MoisRef= M02 DTDB65M02 = 2 NOTE: 5 observations copiées de la table WORKSERV.TBIN. NOTE: La table WORK.TBOUT a 5 observations et 30 variables. NOTE: L'étape DATA a utilisé (Durée totale du processus) : temps réel 0.43 secondes temps processeur 0.03 secondes
Pour l'explication de ce que je veux faire :
J'ai des macro variable qui sont définit "DTDB65Mxx" portant une valeur qui dépend du mois (donc xx peut prendre 01 à 12).
Je lis une table qui contient une colonne Mois (PDREFEXT avec des valeur M01 à M12) et en fonction du mois de cette colonne je dois exploiter la valeur correspondant à la macro variable, d'où la récupération de &&DTDB65&MoisRef.
J'avoue que je suis totalement perdu à cause du comportement de SAS, si je fais une erreur de syntaxe, pourquoi à la deuxième exécution cela fonctionne.
Partager