IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macro Discussion :

Choix de fonction de quote (%STR %QUOTE)


Sujet :

Macro

  1. #1
    Membre régulier Avatar de tidou95220
    Homme Profil pro
    BI junior
    Inscrit en
    Novembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BI junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2008
    Messages : 263
    Points : 90
    Points
    90
    Par défaut Choix de fonction de quote (%STR %QUOTE)
    Bonjour,

    Je rencontre un souci avec une chaine contenant une quote à l'interieur et un pourcentage. J'ai besoin de renseigner ma macrovariable créée par ma requête SQL dans une étape data.

    Ma chaine qui me pose problème =>
    • &&OBJPRIM1 contient la chaine suivante : l'efficacité antipelliculaire du milieu de fermentation évapoconcentré formulé en shampooing à une concentration maximalisée de 4% (0.6%E.S ),




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /* Find OBJPRIM1 */
    proc sql ;
    	SELECT T2.OBJPRIM into:OBJPRIM1 - :%sysfunc(cats(OBJPRIM,&MV_NB_STUDY.))
    	FROM TS_ETUDE as T1
    	LEFT JOIN WORK.EXTRACT_TST as T2 on T1.ETUDE=T2.ETUDE;
    quit;
     
    	%macro PGM_TEST;
    	data TMP_1;
    		TSVAL = %str("&&OBJPRIM1");
    	run;
    	%mend;
    	%PGM_TEST;
    Il m'affiche les erreurs suivantes :
    * WARNING: The quoted string currently being processed has become more than 262 characters long. You might have unbalanced quotation marks.
    * Et il tente de résoudre un macro programme %E.S (%NRSTR ça devrait résoudre mon pb)


    J'ai utilisé %STR %QUOTE et d'autres mais impossible , pouvez vous m'aider svp ?

    Merci d'avance

  2. #2
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    Bonjour !
    Bienvenue dans l'enfer des quotes

    Ici il y a 2 soucis : Le % qui effectivement fait croire à SAS à l'appel d'une macro. Et la simple quote de ta chaine : l'efficacité => du coup il attend une quote fermante ...

    Essaie avec ... SUPERQ!!!! On a pas souvent l'occasion de l'utiliser celle là mais ça fait toujours plaisir

    Attention : %superq utilise une macro variable sans le & devant ... oui c bizzare ...

    Je ne peux pas tester avec ton code mais dans mon cas suivant ça semble marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    /* il fait un warning ici à cause du % et c'est normal */
    data test;
    	var="l'efficacité antipelliculaire du milieu de fermentation évapoconcentré formulé en shampooing à une concentration maximalisée de 4% (0.6%E.S ),";
    	call symputx('ma_chaine',var);
    run;
     
    /* pas d'erreur et de warning, la macro variable est récupéré correctement */
    data TMP;
    	var="%superq(ma_chaine)";
    run;
    ça fait un warning sur le data test (c'est normal) et tout semble bien se passer pour la récupération sur le data TMP.

    Bon courage,
    Steel
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  3. #3
    Membre régulier Avatar de tidou95220
    Homme Profil pro
    BI junior
    Inscrit en
    Novembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : BI junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2008
    Messages : 263
    Points : 90
    Points
    90
    Par défaut
    Génial !!!

    J'ai encore un petit souci de longueur maintenant mais c'est qu'un warning : WARNING: The quoted string currently being processed has become more than 262 characters long. You might have unbalanced quotation marks.

    La valeur contenu dans ma macrovariable est effectivement > à 262 char

    Merci beaucoup, super cette fonction

    Bonne journée

  4. #4
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    L'option NOQUOTELENMAX supprime ce warning.

    Pour plus d'information http://support.sas.com/resources/pap...1/262-2011.pdf.

    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

Discussions similaires

  1. Fonctions de quoting : str, nrquote, nbrquote
    Par L0007 dans le forum Macro
    Réponses: 8
    Dernier message: 12/11/2010, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo