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

SAS Base Discussion :

Récupérer toutes les valeurs possibles d'une variable


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Récupérer toutes les valeurs possibles d'une variable
    Bonjour,

    J'ai une table TOTO :
    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
     
     
    data toto;
    input sujet $ condition_activation $;
    datalines;
    01 FILLED 
    01 0
    01 1 
    02 FILLED
    03 0
    04 1
    05 FILLED
    05 0
    05 1
    ;
    run;
    Je veux récupérer toutes les valeurs distinctes de condition_activation dans une macrovariable comme par exemple:
    CA1=FILLED
    CA2=0
    CA3=1

    Puis je veux faire une table pour chaque condition d'activation dans une boucle pour automatiser.

    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
     
    DATA _FILLED;
    SET TOTO (WHERE=(CA1='FILLED'));
    IF CA1='FILLED' AND DATA1='0' AND DATA2 ='' THEN DO; CHECK='ERREUR'; END;
    ELSE CHECK='RAS'; 
    RUN;
     
    DATA _0;
    SET TOTO (WHERE=(CA2='0'));
    IF CA2='0' AND DATA1='0' AND DATA2 ='' THEN DO; CHECK='ERREUR'; END;
    ELSE CHECK='RAS'; 
    RUN;
     
    DATA _1;
    SET TOTO (WHERE=(CA3='1'));
    IF CA3='1' AND DATA1='0' AND DATA2 ='' THEN DO; CHECK='ERREUR'; END;
    ELSE CHECK='RAS'; 
    RUN;
    Pourriez-vous m'aider svp ?
    Je vous remercie par avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Je ne sais pas si c'est vraiment la table toto que tu veux appeler dans ton "set" statement dans tes tables (_filled _0 et _1) mais voici un code qui devrait faire l'affaire :

    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
     
    data toto;
    input sujet $ condition_activation $;
    datalines;
    01 FILLED 
    01 0
    01 1 
    02 FILLED
    03 0
    04 1
    05 FILLED
    05 0
    05 1
    ;
    run;
     
    %macro test;
    proc sql noprint;
    select distinct condition_activation into :CA1-:CA3 
    from toto;
    quit;
     
    %do i=1 %to 3;
     
    DATA _&&CA&i.;
    SET TOTO (WHERE=(CA&i.="&&CA&i."));
    IF DATA1='0' AND DATA2 ='' THEN DO; CHECK='ERREUR'; END;
    ELSE CHECK='RAS'; 
    RUN;
     
    %end;
     
    %mend;
     
    %test;
    De plus, lorsque tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SET TOTO (WHERE=(CA3='1'));
    IF CA3='1' AND DATA1='0' AND DATA2 ='' THEN DO; CHECK='ERREUR'; END;
    ta première condition if n'est pas utile car tu demandes déjà avec ton where de garder CA3 = '1'. Donc tu es sûr que tu n'auras que ça.
    Je te laisse modifier ce qu'il faut pour que cela fonctionne !
    Bonne soirée

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Bonjour Flo,

    Je te remercie pour ta réponse.
    Par contre, dans l'exemple que j'ai donné j'ai Ac1, AC2 et AC3 mais je ne connais pas à l'avance le nombre de valeurs distinctes de condition_activation.

    Je récupère le nombre de valeurs comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    proc sql noprint;
    select count (distinct condition_activation) into :cnt from toto;
    quit;
    Mais je n'arrive pas attribuer à AC1, AC2, ACx... la valeur correspondante.
    Je voudrai automatiser ce bout spécifiquement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    proc sql noprint;
    select distinct condition_activation into :CA1-:CA3 
    from toto;
    quit;
    J'essaie ça mais ça ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select distinct condition_activation into :AC1-:AC&cnt. from toto;
    quit;

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 99
    Points : 202
    Points
    202
    Par défaut
    Bonjour,

    Citation Envoyé par Elodie3483 Voir le message
    J'essaie ça mais ça ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select distinct condition_activation into :AC1-:AC&cnt. from toto;
    quit;
    Un simple %eval devrait faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select distinct condition_activation into :AC1-:AC%eval(&cnt) from toto;
    "Statistics is the grammar of science" - K. Pearson

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant Finance/Assurance
    Inscrit en
    Décembre 2013
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Finance/Assurance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 198
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    La proc SQL est parfaite pour faire ceci sans faire appel à des macros ou à compter les objets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    proc sql noprint;
    select distinct condition_activation into :CA1-:CA99999
    from toto;
    quit;
    En mettant ca99999, la proc sql va créer autant de macro que nécessaire. Si tu n'as que 10 modalités différentes alors tu auras uniquement de CA1 à CA10 et le reste ne sera pas traité.

    Bonne journée

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Merci à vous 2, ça fonctionne!
    A bientôt.

    Bonne journée

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/09/2014, 07h41
  2. [XL-2003] Récupérer toutes les valeurs d'une colonne
    Par Tintou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2010, 16h38
  3. Récupérer toutes les valeurs d'une liste déroulante
    Par christgh dans le forum Langage
    Réponses: 4
    Dernier message: 10/12/2008, 21h17
  4. 2 valeurs possibles pour une variable : méthode Seek
    Par Corinne4775 dans le forum Access
    Réponses: 8
    Dernier message: 12/02/2007, 19h00
  5. récupérer toutes les valeurs choisies ds un select multiple
    Par toome dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/10/2005, 13h45

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