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 :

Récupération valeur fonction dans macro-variable


Sujet :

Macro

  1. #1
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut Récupération valeur fonction dans macro-variable
    Bonsoir,

    La fonction suivante fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc fcmp outlib=sasuser.MyFunctions.FonctionsDiverses;
     
    	function NomTableFromFichier(NomFichierSource $) $;
    		return(compress(substr(NomFichierSource,9,8) || put(DATE(),ddmmyy6.)));
    	EndSub;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dm log 'clear';
    data _null_;
    	nom='K2811475CERTI44UCANS4CER44';
    	nomT=NomTableFromFichier(nom);
    	put nom=;
    	put nomT=;
    run;
    Produit bien :
    nom=K2811475CERTI44UCANS4CER44
    nomT=CERTI44U150110
    Maintenant j'essaie d'appliquer cette fonction à une macro-variable et de récupérer le résultat dans une macro-variable :

    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
    29
    30
     
    %let fichierATraiter=K2811475CERTI44UCANS4CER44;
    dm log 'clear';
    options cmplib=sasuser.MyFunctions;
     
    %global nomTable;
    %global TableDonnees;
    %global TableContraintes;
    %global TableCoherencesI;
     
    option nomprint;
    data _null_;
    	nomTable=NomTableFromFichier(&fichierATraiter);
    	TableDonnees=D_"&nomTable";
    	TableContraintes=CT_"&nomTable";
    	TableCoherencesI=CI_"&nomTable";
     
    	put nomTable=;
    	put TableDonnees=;
    	put TableContraintes=;
    	put TableCoherencesI=;
     
     
    	Call Symput('nomTable',nomTable);
    	Call Symput('TableDonnees',TableDonnees);
    	Call Symput('TableContraintes',TableContraintes);
    	Call Symput('TableCoherencesI',TableCoherencesI);
    run;
     
    %LectureDonnees("&fichierComplet", "&TableDonnees");
    Là ça ne marche plus, j'obtiens :

    3190 nomTable=compress(substr(&fichierATraiter,9,8) || put(DATE(),ddmmyy6.))
    SYMBOLGEN : Macro variable FICHIERATRAITER traitée dans 'K2811475CERTI44UCANS4CER44'
    3191 TableDonnees=D_"&nomTable";
    ------------
    22
    SYMBOLGEN : Macro variable NOMTABLE traitée dans 5CERTI44 || put(DATE(),ddmmyy6.)
    ERROR 22-322: Erreur de syntaxe ; syntaxe requise : !, !!, &, *, **, +, -, /, ;, <, <=, <>, =,
    >, ><, >=, AND, EQ, GE, GT, IN, LE, LT, MAX, MIN, NE, NG, NL, NOTIN, OR, ^=, |,
    ||, ~=.

    NOTE: Ligne générée par la variable macro "NOMTABLE".
    1 "5CERTI44 || put(DATE(),ddmmyy6.)
    ----------------------------------
    22
    ERROR 22-322: Erreur de syntaxe ; syntaxe requise : !, !!, &, *, **, +, -, /, <, <=, <>, =, >,
    ><, >=, AND, EQ, GE, GT, LE, LT, MAX, MIN, NE, NG, NL, OR, ^=, |, ||, ~=.
    J'ai également essayé directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %let nomTable=%sysfunc(NomTableFromFichier(&fichierATraiter));
    qui produit
    3120 %let nomTable=%sysfunc(NomTableFromFichier(&fichierATraiter));
    SYMBOLGEN : Macro variable FICHIERATRAITER traitée dans 'K2811475CERTI44UCANS4CER44'
    ERROR: La fonction NOMTABLEFROMFICHIER référencée dans la fonction macro %SYSFUNC ou %QSYSFUNC
    est introuvable.
    Je tourne en rond depuis 1h00, si quelqu'un a une idée ça me dépannerait bien.

    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    salut,

    je propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DATA _null_;
    	nomTable=NomTableFromFichier("&fichierATraiter");
    (etc.)
    xav

  3. #3
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Merci Xav,
    en effet j'avais oublié les guillemets.

    Là ça me crée une table vide nommée Certi44.

    Avec un message d'erreur :

    data _null_;
    3261 nomTable=NomTableFromFichier("&fichierATraiter");
    SYMBOLGEN : Macro variable FICHIERATRAITER traitée dans 'K2811475CERTI44UCANS4CER44'
    3262 TableDonnees=D_"&nomTable";
    SYMBOLGEN : Macro variable NOMTABLE traitée dans 5CERTI44 || put(DATE(),ddmmyy6.)
    NOTE: Ligne générée par la variable macro "NOMTABLE".
    1 "5CERTI44 || put(DATE(),ddmmyy6.)
    ---------------------------------
    22
    ERROR 22-322: Erreur de syntaxe ; syntaxe requise : !, !!, &, *, **, +, -, /, <, <=, <>, =, >,
    ><, >=, AND, EQ, GE, GT, LE, LT, MAX, MIN, NE, NG, NL, OR, ^=, |, ||, ~=.
    Même résultat en faisant tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dm log 'clear';
    %let nomTable=%substr("&fichierATraiter",9,8) || put(DATE(),ddmmyy6.);
    %let TableDonnees=D_"&nomTable";
     
     
    %LectureDonnees("&fichierComplet", "&TableDonnees");
    Je pense que c'est la partie date du jour qui n'est pas évaluée.

  4. #4
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    Salut Filippo

    J'ai corrigé ce code mais je n'ai pas vu de lien avec l'appel macro final. j'espère ne pas avoir fait un hors sujet.
    Tu avais trois fois la même erreur dans l'étape DATA.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    proc fcmp outlib=work.MyFunctions.FonctionsDiverses;
     
    	FUNCTION NomTableFromFichier(NomFichierSource $) $;
    		RETURN(compress(substr(NomFichierSource,9,8) || put(DATE(),ddmmyy6.)));
    	EndSub;
    run;
    
    options cmplib=work.MyFunctions;
    
    dm log 'clear';
    DATA _null_;
    	nom='K2811475CERTI44UCANS4CER44';
    	nomT=NomTableFromFichier(nom);
    	put nom=;
    	put nomT=;
    run;
    
    
    
    %let fichierATraiter=K2811475CERTI44UCANS4CER44;
    dm log 'clear';
     
    %global nomTable;
    %global TableDonnees;
    %global TableContraintes;
    %global TableCoherencesI;
     
    OPTION nomprint;
    DATA _null_;
    	nomTable=NomTableFromFichier("&fichierATraiter");
    	TableDonnees=cats("D_","&nomTable");
    	TableContraintes=cats("CT_","&nomTable");
    	TableCoherencesI=cats("CI_","&nomTable");
     
    	put nomTable=;
    	put TableDonnees=;
    	put TableContraintes=;
    	put TableCoherencesI=;
     
     
    	Call Symput('nomTable',nomTable);
    	Call Symput('TableDonnees',TableDonnees);
    	Call Symput('TableContraintes',TableContraintes);
    	Call Symput('TableCoherencesI',TableCoherencesI);
    run;
    nomTable=CERTI44U160110
    TableDonnees=D_CERTI44U160110
    TableContraintes=CT_CERTI44U160110
    TableCoherencesI=CI_CERTI44U160110

  5. #5
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Merci beaucoup Datametric,
    Ah mince j'avais oublié des guillemets, désolé, c'était Vendredi en fin de semaine .

    Ca m'a l'air très bien, je regarde ça Lundi matin au bureau (je n'ai pas SAS chez moi).

    Je te tiens au courant.

    Merci.

  6. #6
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    Pas SAS chez toi ?

  7. #7
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Citation Envoyé par datametric Voir le message
    Pas SAS chez toi ?
    Ben non, juste au bureau

    J'ai demandé un portable à mon chef avec sas dedans. Il n'a pas répondu oui ...

  8. #8
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    tu avais aussi oublié les fonction CATS

  9. #9
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Citation Envoyé par datametric Voir le message
    tu avais aussi oublié les fonction CATS
    Exact
    Merci.

  10. #10
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Merci à vous deux.
    Merci Datametric, ça marche impeccable !


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Récupérer valeur ListBox dans la variable d'une macro
    Par rico63 dans le forum Excel
    Réponses: 2
    Dernier message: 01/07/2014, 18h34
  2. Réponses: 7
    Dernier message: 03/01/2012, 12h14
  3. Valeurs d'une macro-variable dans une table SAS
    Par patril dans le forum Macro
    Réponses: 2
    Dernier message: 03/08/2011, 14h23
  4. [Batch] Récupération valeur wmi dans une variable
    Par perlite dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 30/10/2010, 17h50
  5. Réponses: 1
    Dernier message: 02/06/2010, 15h05

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