Bonsoir,
à la première exécution du code suivant les macros-variables :
&Annee, &Mois, &Periode, &FicOk et &Nom ne sont pas instanciées.
A la seconde exécution (identique) du code : &Annee, &Mois, &Periode, &FicOk sont instanciées mais pas &FicOk.
Il faut 3 exécutions du même code pour que le traitement fonctionne.
Comment faire pour que le code marche à la première exécution ?
J'avais essayé au début en mettant des If à la place des %If sans utiliser de Call SymputX en comparant directement les valeurs de la table aux mactos-variables passées en paramètre mais je ne m'en sortais pas avec les %let.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 %Macro CreeTableMensuelle(MyTableRef, MyLibIn, MyTableOut, MyAnnee, MyMois, MyPeriode); %Global PrefD; %Global PrefC; %Global PostRep; %Global stRep; %Global stFichier; %Global Annee; %Global Mois; %Global Periode; %Global FicOk; %Global Nom; /* Préfixe pour tables de données : Les tables s'appellent D_ suivi du nom du fichier d'origine */ %Let PrefD=D_; /* Préfixe pour table de tests de contraintes */ %let prefC=C_; /* PostFixe pour répertoire de tables à traiter (nom de la feuille de l'arborescence) */ %Let PostRep=A_TRAITER; /* On parcourt la table MyTableRef */ Data _NULL_; Set &MyTableRef; /* Si l'enregistrement courant présente les bonnes condition alors on ajoute */ /* Le fichier qu'il désigne à MyTableOut */ Call SymputX('Annee',Annee); Call SymputX('Mois',Mois); Call SymputX('Periode',Periode); Call SymputX('FicOk',FicOk); %If &Annee eq &MyAnnee and &Mois eq &MyMois and &Periode eq &MyPeriode and &FicOk eq 1 %Then %Do; /* Constitution du répertoire physique où se situe la table /* des données à intégrer à la table mensuelle des données */ %If &MyPeriode eq A %Then %Let stRep=&MyLibIn.\&MyAnnee.\&MyMois.\ANNUEL; %If &MyPeriode eq M %Then %Let stRep=&MyLibIn.\&MyAnnee.\&MyMois.\MENSUEL; Libname LibSrc "&stRep.\&PostRep"; %put &stRep.\&PostRep; /* Nom de la table à intégrer */ Call SymputX('Nom',Fichier); %Let stFichier=&PrefD.&Nom; %put MyTableRef = &MyTableRef - stFichier = &stFichier; /* Ajout de la table à MyTableOut */ %IntegreTable(LibSrc.&StFichier,&MyTableOut); /* Constitution du nom de la table des tests à intégrer à la table mensuelle des tests */ %End; Run; %Mend;
Si quelqu'un a une idée ça me dépannerait bien.
Merci![]()
Partager