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 :

Recherche d'une valeur dans une colonne d'une table


Sujet :

Macro

  1. #1
    Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 86
    Points : 48
    Points
    48
    Par défaut Recherche d'une valeur dans une colonne d'une table
    Bonjour,

    Je voudrais réaliser une macro qui me retourne 1 si la variable existe dans la colonne indiquée de la table et 0 sinon, j'ai fé la macro suivante mais il y'a un prob. Merci bien d'avance pour votre aide.

    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
    %macro VarExiste(table,colonne,variable);
    proc sql;
    select count(*) into :nb from &table;
    select &colonne into :val separated by '|' from &table;
    quit;
    %do i=1 %to &nb;
    %let var&i=%scan(&val,&i,'|');
    %if &variable=&&var&i %then %do;
          %let existe=1;
    %end;
    %else %do;
          %let existe=0;
    %end;
    %end;
    &existe 
    %mend;
    %VarExiste(sasuser.teste,code_ind,Ind1);

  2. #2
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Ce sujet est déjà été traité ICI. Merci de faire une petite recherche.
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  3. #3
    Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 86
    Points : 48
    Points
    48
    Par défaut
    Cette macro permet bien de chercher si la valeur existe ou non dans la colonne de la table "table" . Mais je veux récupérer la valeur retournée (0 ou 1) pour l'utiliser dans un test conditionnel IF après c'est pourqui j'ai ajouté la ligne avant dernière '&resultat' pour me retourner 0 ou 1 mais ca marche pas

  4. #4
    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
    Bonjour,
    J'ai pratiquement pas touché à ton programme:

    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
    data toto;
    input age;
    cards;
    48
    78
    96
    69
    ;
    run;
     
    %macro VarExiste(TABLE,colonne,variable);
    proc sql noprint;
    SELECT count(*) INTO :nb FROM &TABLE;
    SELECT &colonne INTO :val separated BY '|' FROM &TABLE;
    quit;
    %do i=1 %TO &nb;
    %let var&i=%scan(&val,&i,'|');
    %IF &variable=&&var&i %then %do;
          %let existe=1;
    %end;
    %else %do;
          %let existe=0;
    %end;
    %end;
    %let resultat=&existe.;
    %put resultat=&resultat.;
    %mend;
    %VarExiste(toto,age,69);

  5. #5
    Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 86
    Points : 48
    Points
    48
    Par défaut
    mais quand je veux utiliser la valeur retournée par la macro dans un %IF ca marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %macro test;
    %if %VarExiste(toto,age,69) %then %do;
    proc sql; 
    select * from toto;
    quit;
    %end;
    %mend;
    %test;

  6. #6
    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
    Normal que ça ne marche pas puisque la première macro ne retourne pas 0 ou 1, donc il faut tester la valeur de résultat pour effectuer la suite de l’opération

    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
    DATA toto;
    input age;
    cards;
    48
    78
    96
    69
    ;
    run;
     
    %macro VarExiste(TABLE,colonne,variable);
    proc sql noprint;
    SELECT count(*) INTO :nb FROM &TABLE;
    SELECT &colonne INTO :val separated BY '|' FROM &TABLE;
    quit;
    %do i=1 %TO &nb;
    %let var&i=%scan(&val,&i,'|');
    %IF &variable=&&var&i %then %do;
          %let existe=1;
    %end;
    %else %do;
          %let existe=0;
    %end;
    %end;
    %let resultat=&existe.;
    %put resultat=&resultat.;
     
    %IF &resultat=1 %then %do;
    proc sql; 
    create table tr_5 as
    SELECT * FROM toto;
    quit;
    %end;
    %mend;
    %VarExiste(toto,age,10);
     
     
    %VarExiste(toto,age,69);

  7. #7
    Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 86
    Points : 48
    Points
    48
    Par défaut
    Apparement, j'étais po assez claire, je veux utiliser %varexiste() dans une autre macro , autrement dire faire appel de cette macro dans un %if qui appartient à un autre programme, c'est pourquoi j'ai besoi que cette macro me retourne une valeur

  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
    Retourner un résultat, je sais pas faire mais à defaut tu peux faire ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %global resultat;
     
    %macro test;
    %IF &resultat=1 %then %do;
    proc sql;
    create table ttt as 
    SELECT * FROM toto;
    quit;
    %end;
    %mend;
    %test;

  9. #9
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Un code plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    %macro VarExiste(TABLE,variable);
    option mprint;
    %global res;
    %let res=0;
    proc contents data=&table out=res_cont noprint; run;
    proc sql;
    SELECT count(*) INTO :res  FROM res_cont where NAME=%upcase("&variable");
    quit;
    %mend;
    %VarExiste(sashelp.adomsg,text);
    %put &res;
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2014, 12h05
  2. [XL-2003] Correspondance d'une valeur dans différentes colonnes et lignes
    Par bari89 dans le forum Excel
    Réponses: 2
    Dernier message: 06/06/2013, 09h11
  3. Réponses: 0
    Dernier message: 18/03/2013, 12h05
  4. [XL-2000] Remplir une valeur dans cellule à partir d'une valeur precise d'un fichier texte
    Par cactus666 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/01/2010, 10h31
  5. Recherche d'une valeur dans plusieurs colonnes
    Par Arnaud F. dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/03/2009, 11h44

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