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 :

%INCLUDE et SAS_EXECFILEPATH


Sujet :

Macro

  1. #1
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 243
    Points : 200
    Points
    200
    Par défaut %INCLUDE et SAS_EXECFILEPATH
    Bonjour,

    Je m'embrouille

    J'ai une macro qui récupère le répertoire courant de l'exécution du programme.
    (J'ai le path et le nom du fichier est retiré)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    %global path; /*Contains the execution path for this sas program.*/
     
    %macro grabpath ;
    %let path = %qsubstr(%sysget(SAS_EXECFILEPATH),1,%length(%sysget(SAS_EXECFILEPATH))-%length(%sysget(SAS_EXECFILEname)));
    %mend grabpath;
    Donc dans path j'ai H:\AppData\SAS\SASPC-ICSC\SasProc\Test\

    Je voudrais utiliser cette valeur avec l'instruction %include
    avant j'avais le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %include Initialization;
    qui allait me rechercher le code du programme Initialization.sas

    J'ai du changer de répertoire et j'aurais voulu pouvoir faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %include &path.Initialization;
    Mais SAS n'est pas très content.

    Quelqu'un peut-il m'aider?

    Merci

  2. #2
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Il te manque les quotes je pense

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include "&path.Initialization"
    et Initialization ne serait pas Initialization.sas?

  3. #3
    Invité
    Invité(e)
    Par défaut
    bonjour;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    proc sql noprint;
    select xpath into :progname
    from sashelp.vextfl where upcase(xpath) like '%.SAS';
    quit;
     
    %include "&progname";

  4. #4
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Il y a en fait 3 syntaxes pour %INCLUDE :
    - %INCLUDE nomProgramme ; que tu utilisais jusqu'à présent. Elle ne fonctionne qu'en sous-entendant le répertoire, c'est à dire que SAS cherche dans son répertoire par défaut (en bas à droite de la session sur SAS Windows). Et ne fonctionne que si tu n'as aucun caractère "spécial" dans ton nom de programme, par exemple des tirets feront planter.
    - %INCLUDE pgm ; avec PGM le nom logique associé à une instruction FILENAME préalable. Dans ton cas ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FILENAME init "&path.initialization.sas" ;
    %INCLUDE init ;
    - %INCLUDE "chemin et nom du fichier avec son extension" ; qui correspond à la suggestion de Brice.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %INCLUDE "&path.initialization.sas" ;
    Bon courage.
    Olivier

    @Julie : 2 remarques sur ton (très joli) code. La première c'est que tu récupères exactement la même info qu'avec %sysget(SAS_EXECFILEPATH). La 2e c'est que dans la proc SQL, on a intérêt à attaquer les vues DICTIONARY équivalentes à celles de la SASHELP. Car en fait, la SASHELP fait des vues vers les vues DICTIONARY !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc sql noprint;
    SELECT xpath INTO :progname
    FROM dictionary.extfiles WHERE upcase(xpath) LIKE '%.SAS';
    quit;
    Même résultat, mais ça doit aller (marginalement, je le concède) un poil plus vite.
    Bon courage.
    Olivier

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par olivier.decourt Voir le message
    @Julie : 2 remarques sur ton (très joli) code. La première c'est que tu récupères exactement la même info qu'avec %sysget(SAS_EXECFILEPATH). La 2e c'est que dans la proc SQL, on a intérêt à attaquer les vues DICTIONARY équivalentes à celles de la SASHELP. Car en fait, la SASHELP fait des vues vers les vues DICTIONARY !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc sql noprint;
    SELECT xpath INTO :progname
    FROM dictionary.extfiles WHERE upcase(xpath) LIKE '%.SAS';
    quit;
    Même résultat, mais ça doit aller (marginalement, je le concède) un poil plus vite.

    Merci Olivier.


    On apprend toujours . Mais je me disais que pour une vue sur les tables de SASHELP sont tellement trop petites qu'il n'y a pas de différence entre interroger une table ou une vue.
    Mais personnellement j’opte pour la solution N°1 c'est-à-dire avec le %sysget ( moins de code et même résultat )

    Merci encore Olivier.

    Julie.

  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 : 51
    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
    J'utilise une autre syntaxe pour l'include.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Filename pgm "d:\projet\pgm";
     
    %include pgm(prog1.sas);
    %include pgm(prog2.sas);
    Ca permet de composer des variantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %include pgm(prog1,prog2)
    %include pgm(prog1) lrecl=2000
    Ca vient des environnements Mainframe mais ca fonctionne partout.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  7. #7
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 243
    Points : 200
    Points
    200
    Par défaut
    Bonjour!

    Merci à tous pour vos réponses!

    J'ai opté pour la solution de datametric et olivier (%include pgm).
    (en fait c'est exactement celle que je voulais atteindre hier mais je me suis trop embrouillé à force d'avoir trop essayé
    Comme je dois faire plusieurs include dans le code, je trouve cette solution plus visible plutôt que d'aller chercher dans la chaîne de caractères... --> C'est juste une question de goût )

    @Tous merci pour ces explications. C'est toujours impressionnant ce qu'on apprend en postant sur ce forum.(Je ne savais pas par exemple qu'il y avait différentes possibilités pour utiliser un %include.)

    @megamind
    De ce que j'avais lu, l'utilisation du *.sas n'était pas obligatoire.
    (Mais je ne sais pas si c'est toujours optionnel ou bien obligatoire dans certains cas.)

    Voici donc le code final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /*code de t2.sas juste pour vérifier que l'appel a fonctionné.*/
    %put hello!;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /*programme principal*/
    %global path; /*Contains the execution path for this sas program.*/
     
    %macro grabpath ;
    %let path = %qsubstr(%sysget(SAS_EXECFILEPATH),1,%length(%sysget(SAS_EXECFILEPATH))-%length(%sysget(SAS_EXECFILEname)));
    %mend grabpath;
     
    %grabpath;
    %put &path;
    filename dir "&path";
     
    %include dir(t2);
    Et voilà.... encore une de mes questions avec un tag "Résolu"!

  8. #8
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Comme quoi on a pas fini d'apprendre!!

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

Discussions similaires

  1. [Débutant][Application web] : web.xml + includes jsp
    Par silver_dragoon dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 12/02/2004, 20h46
  2. Problème d'include sous Dev-c++ 4.9.8.0
    Par Argonz dans le forum Dev-C++
    Réponses: 16
    Dernier message: 20/11/2003, 17h36
  3. include
    Par ronald dans le forum ASP
    Réponses: 11
    Dernier message: 06/11/2003, 14h30
  4. INCLUDE non exécuté
    Par Sadneth dans le forum ASP
    Réponses: 3
    Dernier message: 07/09/2003, 00h44
  5. #include "math.h" et #include <math.h>
    Par pounka dans le forum C
    Réponses: 4
    Dernier message: 01/05/2003, 21h06

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