Bonsoir,
La fonction suivante fonctionne très bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 proc fcmp outlib=sasuser.MyFunctions.FonctionsDiverses; function NomTableFromFichier(NomFichierSource $) $; return(compress(substr(NomFichierSource,9,8) || put(DATE(),ddmmyy6.))); EndSub; run;Produit bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 dm log 'clear'; data _null_; nom='K2811475CERTI44UCANS4CER44'; nomT=NomTableFromFichier(nom); put nom=; put nomT=; run;
Maintenant j'essaie d'appliquer cette fonction à une macro-variable et de récupérer le résultat dans une macro-variable :nom=K2811475CERTI44UCANS4CER44
nomT=CERTI44U150110
Là ça ne marche plus, j'obtiens :
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 %let fichierATraiter=K2811475CERTI44UCANS4CER44; dm log 'clear'; options cmplib=sasuser.MyFunctions; %global nomTable; %global TableDonnees; %global TableContraintes; %global TableCoherencesI; option nomprint; data _null_; nomTable=NomTableFromFichier(&fichierATraiter); TableDonnees=D_"&nomTable"; TableContraintes=CT_"&nomTable"; TableCoherencesI=CI_"&nomTable"; put nomTable=; put TableDonnees=; put TableContraintes=; put TableCoherencesI=; Call Symput('nomTable',nomTable); Call Symput('TableDonnees',TableDonnees); Call Symput('TableContraintes',TableContraintes); Call Symput('TableCoherencesI',TableCoherencesI); run; %LectureDonnees("&fichierComplet", "&TableDonnees");
J'ai également essayé directement :3190 nomTable=compress(substr(&fichierATraiter,9,8) || put(DATE(),ddmmyy6.))
SYMBOLGEN : Macro variable FICHIERATRAITER traitée dans 'K2811475CERTI44UCANS4CER44'
3191 TableDonnees=D_"&nomTable";
------------
22
SYMBOLGEN : Macro variable NOMTABLE traitée dans 5CERTI44 || put(DATE(),ddmmyy6.)
ERROR 22-322: Erreur de syntaxe ; syntaxe requise : !, !!, &, *, **, +, -, /, ;, <, <=, <>, =,
>, ><, >=, AND, EQ, GE, GT, IN, LE, LT, MAX, MIN, NE, NG, NL, NOTIN, OR, ^=, |,
||, ~=.
NOTE: Ligne générée par la variable macro "NOMTABLE".
1 "5CERTI44 || put(DATE(),ddmmyy6.)
----------------------------------
22
ERROR 22-322: Erreur de syntaxe ; syntaxe requise : !, !!, &, *, **, +, -, /, <, <=, <>, =, >,
><, >=, AND, EQ, GE, GT, LE, LT, MAX, MIN, NE, NG, NL, OR, ^=, |, ||, ~=.
qui produit
Code : Sélectionner tout - Visualiser dans une fenêtre à part %let nomTable=%sysfunc(NomTableFromFichier(&fichierATraiter));Je tourne en rond depuis 1h00, si quelqu'un a une idée ça me dépannerait bien.3120 %let nomTable=%sysfunc(NomTableFromFichier(&fichierATraiter));
SYMBOLGEN : Macro variable FICHIERATRAITER traitée dans 'K2811475CERTI44UCANS4CER44'
ERROR: La fonction NOMTABLEFROMFICHIER référencée dans la fonction macro %SYSFUNC ou %QSYSFUNC
est introuvable.
Merci.
Partager