Bonjour,
Je n'arrive pas à comprendre la différence exacte entre les fonctions %STR et %QUOTE. Pourriez-vous m'éclairer?
Merci
Bonjour,
Je n'arrive pas à comprendre la différence exacte entre les fonctions %STR et %QUOTE. Pourriez-vous m'éclairer?
Merci
Les balises code
FAQ SAS
Rubrique SAS
Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.
Salut Fabrice
%str masque la mnémonique à la compilation alors que %quote la masque à l'exécution.
Généralement le passage de paramètre utilise le %quote.
N'oubliez pas de cliquer sur lorsque votre problème est réglé !
Salut,
C'est bien ce qui me semblait.
Quel est alors le but d'utiliser %STR?
As-tu un exemple explicitant l'utilité du %STR par rapport au %QUOTE?
Merci
Les balises code
FAQ SAS
Rubrique SAS
Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.
Pour faire court : sans macro-programme, pas de différence notable entre %STR et QUOTE. C'est justifié par un enchaînement instantané de la compilation et de l'exécution.
Par exemple :
Les deux macro-fonctions masquent toutes deux le sens du point-virgule et permettent de l'intégrer à la valeur de la macro-variable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 %LET pr = PROC PRINT %STR(;) RUN %STR(;) ; %LET pr = PROC PRINT %QUOTE(;) RUN %QUOTE(;) ;
Par contre, dans un macro-programme, on distinguera les caractères qui sont à bien interpréter lors de la compilation (pure syntaxe, les macro-variables n'ayant pas encore de valeurs) et lors de l'exécution.
Dans le %PUT, il faut un %STR car le point-virgule à masquer est visible dès la compilation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 %MACRO combien (table, condition) ; PROC SQL NOPRINT ; SELECT COUNT(*) INTO : nb FROM &table %IF %QUOTE(&condition) NE %THEN %DO ; WHERE &condition %END ; ; QUIT ; %PUT il y a &nb observations %STR(;) la condition était : &condition ; %MEND combien ;
Dans la condition, il faut bien prévoir un masquage. Imaginons que l'appel soit :
La condition qu'aurait à évaluer le compilation macro deviendrait
Code : Sélectionner tout - Visualiser dans une fenêtre à part %combien (sashelp.class, sex ne "F")
%IF sex ne "F" NE %THEN ...
ce qui n'a aucun sens (en tout cas pas celui qu'on voudrait !).
Mais à la lecture du code compilé, aucune erreur n'est à craindre : il faut donc faire le masquage à l'exécution, quand la macro-variable prendra sa valeur.
Olivier
Bon courage.
Olivier
Merci Olivier pour cet éclaircissement!
Si on remplace, dans ton exemple, le %STR par un %QUOTE, ça ne marche pas!
Cela s'explique par le fait que %QUOTE est directement exécuté lors de la phase de compilation du macro-programme contrairement au %STR qui lui est juste compilé? ... c'est bien ça?
Merci
Les balises code
FAQ SAS
Rubrique SAS
Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.
Oui, dans l'exemple, on ne peut pas s'en sortir avec une seule macro-fonction (soit %STR, soit %QUOTE) ; les deux ont leur utilité.
A la compilation, seule la fonction %STR fait son office de masquage. %QUOTE est inactive, on peut même dire ignorée. A la fin de la compilation, le macro-programme est stocké (dans un catalogue SASMACR) et tous les caractères masqués par %STR sont bien planqués. %QUOTE n'a encore servi à rien.
Dans un 2e temps, lors de l'appel du macro-programme, on ressort la version compilée des oubliettes. Les paramètres prennent leurs valeurs, et le code est réellement exécuté. C'est à ce moment-là qu'intervient %QUOTE, pour cacher des caractères gênants dans la syntaxe après valorisation des paramètres.
Bon courage.
Olivier
Superbe
Les balises code
FAQ SAS
Rubrique SAS
Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.
J'espere qu'on se verra du 13-14 Octobre pour parler de tout ça
Bonne idée de présentation ... je vais peut être la soumettre .... ça pourrait intéresser du monde!
Les balises code
FAQ SAS
Rubrique SAS
Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.
Ah bon ?
Il y a encore des présentations qui ne sont pas du pur marketing au SAS Forum ?
Bon courage.
Olivier
Marketing pas que ... en regardant les sessions prévues .... dommage que pour Las Vegas ça soit trop tard, les sessions sont plus nombreuses ... j'aurais tenté ma chance .... il m'en aurait fallu beaucoup d'ailleurs pour espérer être pris sur la présentation de la différence entre le %SRT et le %QUOTE .... peut être un peu juste ... quoique!
Les balises code
FAQ SAS
Rubrique SAS
Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager