Bonsoir,
j'essaie de faire une macro qui vérifie que la valeur d'une variable est numérique :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
%Macro Contenu_Numeric(MyvarIn);
	%global Flag;
	%let Flag=1;
 
	%local temp;
	%let temp=%sysfunc(input(&MyVarIn,best.));
 
	%if &temp eq . %then %let Flag=0;
%Mend;
Me renvoie à l'exécution :
ERREUR: The INPUT function referenced in the %SYSFUNC or %QSYSFUNC macro function is not found.
Et :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
%Macro Contenu_Numeric(MyvarIn);
	%global Flag;
	%let Flag=1;
 
	%local temp;
	%let temp=%input(&MyVarIn,best.);
 
	%if &temp eq . %then %let Flag=0;
%Mend;
Produit à la compilation :
ERREUR: Macro keyword INPUT appears as text. A semicolon or other delimiter may be missing.
Sinon j'ai aussi essayé une autre macro :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
%Macro Contenu_Numeric(MyvarIn);
	%global Flag;
	%let Flag=1;
 
	%local l;
	%local n;
 
	%let l=%length(&MyVarIn);
	%do n=1 %to &l;
		%if %sysfunc(substr(&MyVarIn,&n,1)) not in ('0','1','2','3','4','5','6','7','8','9','.',',') %then %let flag=0;
	%end;
%Mend;
qui produit à l'éxécution, avec ou sans %sysfunc :

ERREUR: The macro CONTENU_NUMERIC will stop executing.
ERREUR: A character operand was found in the %EVAL function or %IF condition where a numeric
operand is required. The condition was: %sysfunc(substr(&MyVarIn,&n,1)) not in
('0','1','2','3','4','5','6','7','8','9','.',',')

Si quelqu'un a une idée de syntaxe pour la 1ère ou la seconde macro, je suis preneur.

Merci