Bonjour,
je viens de bloquer quelques heures sur un problème de macro code que j'ai finalement pu résoudre avec l'aide d'un collègue.
Voici le code écrit au départ et qui ne marche pas (à tester !!)
et voici le code qui marche
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 data a; adr1='92000 chatillon';adr2='BE10001 BRUXELLES';adr3='10500 BERLIN';run; %macro cherche_CP (DATA=,OUT=,Var=ADR1 ADR2 ADR3); %LET nbvar=%SYSFUNC(COUNTW(&var)); %DO I=1 %TO &nbvar ; %LET mot&i=%QSCAN(&var,&i,%STR( )); %END; %IF &OUT= %THEN %LET OUT=&DATA ; DATA a ; SET &DATA; %DO I=1 %TO &nbvar; _&&mot&i=&&mot&i; %END; RUN; %mend; %cherche_cp(data=a,out=,var=adr1 adr2 adr3);run;
...
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 data a; adr1='92000 chatillon';adr2='BE10001 BRUXELLES';adr3='10500 BERLIN';run; %macro cherche_CP (DATA=,OUT=,Var=ADR1 ADR2 ADR3); %LET nbvar=%SYSFUNC(COUNTW(&var)); %DO I=1 %TO &nbvar ; %LET mot&i=%QSCAN(&var,&i,%STR( )); %END; %IF &OUT= %THEN %LET OUT=&DATA ; DATA a ; SET &DATA; %DO I=1 %TO &nbvar; _%SYSFUNC(COMPRESS(&&mot&i))=&&mot&i; %END; RUN; %mend; %cherche_cp(data=a,out=,var=adr1 adr2 adr3);run;
la différence ? une seule ligne
_&&mot&i=&&mot&i; dans le premier code remplacé par _%SYSFUNC(COMPRESS(&&mot&i))=&&mot&i; dans le second...
ce qui me gêne ? C'est que j'ai l'impression d'avoir écrit des dizaines de fois un code similaire au premier sans avoir de problèmes... Au delà de cette impression, je ne comprend pas ce qui cause le malaise au macro code au point qu'on doivent encapsuler le &&mot&i dans %sysfunc(compress( )) alors que dans le second membre (qui est quasi la même chose... :S ) on en a pas besoin...
Qui a des idées sur la nature des problèmes rencontré par l'interprétateur du macro code ou sur ce qui pose problème dans ce code ?
Merci.





Répondre avec citation
Partager