Bonjour à tous,
Je cherche à utiliser la fonction ROUND dans une macro. Via l'utilisation de macro-variables, je veux que chaque variable de ma table SAS soit arrondie à un chiffre après la virgule... Or lorsque j'exécute ma macro, l'erreur suivante apparaît :
"Argument 1 to function ROUND referenced by the %SYSFUNC or %QSYSFUNC macro function is not a number.
ERROR: Invalid arguments detected in %SYSCALL, %SYSFUNC, or %QSYSFUNC argument list. Execution of %SYSCALL statement or %SYSFUNC or %QSYSFUNC function reference is terminated."
Et étrangement, une simple étape DATA en-dehors de ma macro qui teste l'opération voulue sur une variable fonctionne... Voici mon code :
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 /*Ca ne marche pas*/ %MACRO Test; %LET liste_type=AE HAE; %DO k=1 %TO 2; %LET type=%SCAN(&liste_type., &k.); /*On arrondit les variables listées dans liste_var&type. à un chiffre après la virgule*/ %DO i=1 %TO &nb_vartable.; %LET var=%SCAN(&&liste_var&type., &i.); /*La liste des variables de ma table (une centaine)*/ DATA Source_creacvs_&type.; SET Source_creacvs_&type.; &var. = %SYSFUNC(ROUND(&var., 0.1)); RUN; %PUT La variable est &var.; /*Ca prend bien le nom de mes variables*/ %END; %END; %MEND; %Test; /*Ca marche*/ DATA Source_creacvs_AE; SET Source_creacvs_AE; AEREG11CTHR = ROUND(AEREG11CTHR, 0.1); RUN;
C'est comme si ma macro-variable var était reconnue comme une phrase (une suite de caractères) et non pas comme les variables de ma table... Auriez-vous une idée s'il vous plaît?
Merci à vous et bonne journée.
Partager