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 :

macro variable et les chiffres


Sujet :

Macro

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut macro variable et les chiffres
    Bonjour , tout le monde, d'après mes connaissances , une macro variable ne peut être que t'une chaine de carectère, mais j'ai trouvé dans des programmes qui tournent probablement depuis quelques années, ce qui suit,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    libname rep " c:\donnes\";
     
    %let arg1 = 1999;
     
    proc sql; 
    connecte to ma base;
    creatte table rep.a as 
    select * from connection to ma base ( select cham1 , cham2, cham3 where 
    cham3< &arg1.) ;disconnect from ma base;
    quit;

    ma question est: est ce que l'expression cham3< &arg1. est juste?? , je veux dire est ce que la condition est valable, sachant que l'argument est une chaine de caractère et que ( cham3) est un nombre ( année),
    Dernière modification par fafabzh6 ; 15/03/2010 à 21h19. Motif: Manque balise [code] [/code]

  2. #2
    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
    Par défaut
    Oui car SAS remplacera la MV par la valeur, comme si tu l'écrivais à la main. par conséquent, le système comprendra que la valeur testée est numérique.

    Je te propose de rajouter OPTION MPRINT pour que tu visualises ce que fait SAS. Le code est présenté en clair et te permet de voir ce qui se passe.

  3. #3
    Membre chevronné
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Par défaut
    Bonjour,

    Les macros variables ne sont pas typées.

    Une macro variable n'est rien d'autre que l'enregistrement d'une valeur que tu peux utiliser ensuite dans l'écriture de ton code.
    Le macro langage remplace la petite main du développeur. Il permet au développeur d'écrire du code plus vite et d'automatiser ses programmes. Il ne faut surtout pas confondre macro-langage et langage SAS de base.

    La question que tu poses revient à demander si le code ci-dessous est valide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    proc sql;
    connecte to ma base;
    creatte table rep.a as
    select * from connection to ma base ( select cham1 , cham2, cham3 where
    cham3< 1999) ;disconnect from ma base;
    quit;
    Pour info, il manque une instruction from <une table de la base> dans la sélection.

  4. #4
    Invité
    Invité(e)
    Par défaut
    data metric et sasadm merci de vos réponse,


    SASADM oui t'as raison, il manquait from ma table, donc si je comprends bien, quand on met des numérique dans une macro variable, sas les comprendra comme du numérique,

    donc si je veux travaillé sur des dates ,
    je peux écrire celà:

    %let arg1= 12/02/2010;
    %let arg2= 01/01/1990;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    proc sql;
    connecte to ma base;
    creatte table a as
    select * from connection to ma base ( select cham1 , cham2, cham3 from ma table where &arg2. <cham3=< &arg1.) ;disconnect from ma base;
    quit;

    autrement dit;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    %let arg1 = 19800;
    %let arg2 = 2589 ; 
     
     data _null_;
    arg3 = &arg1 - &arg2.;
    %put arg3 = ;
    run;
     
    il me donnera arg3 = 1721.
    désolée j'en ai pas du SAS chez moi donc je ne peux tester que pendant mon stage que j'ai commencé depuis kelkes jour,




    Citation Envoyé par sasadm Voir le message
    Bonjour,

    Les macros variables ne sont pas typées.

    Une macro variable n'est rien d'autre que l'enregistrement d'une valeur que tu peux utiliser ensuite dans l'écriture de ton code.
    Le macro langage remplace la petite main du développeur. Il permet au développeur d'écrire du code plus vite et d'automatiser ses programmes. Il ne faut surtout pas confondre macro-langage et langage SAS de base.

    La question que tu poses revient à demander si le code ci-dessous est valide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    proc sql;
    connecte to ma base;
    creatte table rep.a as
    select * from connection to ma base ( select cham1 , cham2, cham3 where
    cham3< 1999) ;disconnect from ma base;
    quit;
    Pour info, il manque une instruction from <une table de la base> dans la sélection.

  5. #5
    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
    Par défaut
    ...presque car dans ton cours, tu as du remarqué que les dates sont à convertir de cette notation textuelle (12/12/2009) à une date compréhensible par SAS (17321).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc sql;
    connect TO ma base;
    creatte TABLE a AS
    SELECT * FROM connection TO ma base ( SELECT cham1 , cham2, cham3 FROM ma WHERE "&arg2."d <cham3=< "&arg1."d) ;disconnect FROM ma base;
    quit;
    Pourquoi utilises-tu la notation du SQL pass-trough, ie. pourquoi ton étape ne ressemble pas à cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc sql;
    create TABLE a AS
    SELECT cham1 , cham2, cham3 
    FROM ma WHERE "&arg2."d <cham3=< "&arg1."d
    ;
    quit;

    Pour ce qui est du typage, je reste sur ma position, les MV sont caractères car SAS ne peut résoudre cela sans la fonction %sysevalf . mais c'est un détail dans ton cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    %let a=1;
    %let b=2;
    %put &a+&b;
    %let c=&a+&b;
    %put &c;

  6. #6
    Invité
    Invité(e)
    Par défaut
    merci datametric; juste je n'ai jamais étudié SAS, et là je veux m'y mettre car je suis amenée à travaillé avec dans mon stage, et SQL pass trough car j'ai ma base oracle est installée sur UNIX ( je parles biensur de là ou je fais mon stage et malheureusement j'en ai que 2 jours /semaine),


    - sinon une question accessoir, la différence entre ( call symput et call symputX) ?

    encore une autre fois j'en ai pas de SAS chez moi.


    Citation Envoyé par datametric Voir le message
    ...presque car dans ton cours, tu as du remarqué que les dates sont à convertir de cette notation textuelle (12/12/2009) à une date compréhensible par SAS (17321).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc sql;
    connect TO ma base;
    creatte TABLE a AS
    SELECT * FROM connection TO ma base ( SELECT cham1 , cham2, cham3 FROM ma WHERE "&arg2."d <cham3=< "&arg1."d) ;disconnect FROM ma base;
    quit;
    Pourquoi utilises-tu la notation du SQL pass-trough, ie. pourquoi ton étape ne ressemble pas à cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc sql;
    create TABLE a AS
    SELECT cham1 , cham2, cham3 
    FROM ma WHERE "&arg2."d <cham3=< "&arg1."d
    ;
    quit;

    Pour ce qui est du typage, je reste sur ma position, les MV sont caractères car SAS ne peut résoudre cela sans la fonction %sysevalf . mais c'est un détail dans ton cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    %let a=1;
    %let b=2;
    %put &a+&b;
    %let c=&a+&b;
    %put &c;

  7. #7
    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
    Par défaut
    pour le coup tu peux te référer à la doc de SAS http://support.sas.com/onlinedoc/913/docMainpage.jsp

    mais la réponse est simplement que symptux (v9) aligne à gauche le contenu de la MV.

    pour Oracle, il faut dans ce cas supprimer le d après les guillementscar ORACLE ne connaît pas le langage SAS. Or, tout ce qui est dans la sous-requête SQL identifiée par "From Connection to" est en dehors du monde SAS.

Discussions similaires

  1. [XL-2010] Macro Additioner une formule variable selon les cases séléctionnées
    Par MarieJuan dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2014, 11h53
  2. [DATA] Recuperer les champs de ta table dans une macro variable
    Par Deciprog dans le forum SAS Base
    Réponses: 5
    Dernier message: 04/05/2010, 11h05
  3. Réponses: 1
    Dernier message: 02/07/2008, 16h30
  4. Décomposer les chiffres d'un nombre en variables
    Par kryogen dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/04/2008, 13h46
  5. Utiliser les macro variables avec sql
    Par Euseibus dans le forum Macro
    Réponses: 5
    Dernier message: 25/10/2007, 18h40

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