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 :

Boucle et macro SAS


Sujet :

Macro

  1. #1
    Membre à l'essai
    Femme Profil pro
    Chargée d'étude statistiques
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargée d'étude statistiques
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 19
    Points
    19
    Par défaut Boucle et macro SAS
    Bonjour,

    J'essaie d'améliorer mon niveau de programmation en SAS macro mais là je bute sur un problème et je n'ai même pas le début d'une solution.

    Je voudrais automatiser ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PROC SQL;
       CREATE TABLE LIMITV_temp6 AS 
       SELECT t1.BEN_NIR_IDT, 
              /* not_contains_H */
                (Case When (t1.CIM1="" or t1.CIM1 not contains "H") and (t1.CIM2="" or t1.CIM2 not contains "H") and  (t1.CIM3="" or t1.CIM3 not contains "H") and (t1.CIM4="" or t1.CIM4 not contains "H") then 1
               Else 0 
                end) AS not_contains_H
        FROM LIMITV_temp5 t1;
    QUIT;

    J'ai tenté ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %macro top2;
     
    Data LIMITV_temp6;
    Set LIMITV_temp5;
         %DO i = 1 %to &nb_max_cim;
              If CIM&i="" or CIM&i not =: "H" then not_contains_H= 1; Else not_contains_H=0;
         %end ; 
     
    Run;
    %MEND TOP2; 
    %TOP2;
    &nb_max_cim est une macro variable que je créé au début de mon programme car elle peut varier.

    Mais ça ne me donne pas le résultat attendu à savoir il faut que l'ensemble de mes variables CIM1 à CIM4 ne doivent pas contenir la lettre H.

    J'espère être suffisamment claire et j'espère surtout que vous pourrez m'apporter votre aide.

    Par avance merci.

    Camille

  2. #2
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,
    Je te propose cette solution en utilisant array:

    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
    data test;
    input cim1 $ cim2 $ cim3 $;
    cards;
    . H C
    D H A
    A B C
    ;
    run;
    data test1(drop=i);
    set test;
    array cim(*) cim:;
    do i=1 to dim(cim);
    if cim(i) in ("", "H") then do;
    not_contains_H=1 ;
    leave;
    end;
    else 
    not_contains_H=0;
    end;
    run;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Citation Envoyé par Kyeenai Voir le message
    Bonjour,
    J'ai tenté ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    %macro top2;
     
    Data LIMITV_temp6;
    Set LIMITV_temp5;
         %DO i = 1 %to &nb_max_cim;
              If CIM&i="" or CIM&i not =: "H" then not_contains_H= 1; Else not_contains_H=0;
         %end ; 
     
    Run;
    %MEND TOP2; 
    %TOP2;
    Camille
    Bonjour,
    J'ai apporté des modifications à ton code. Tu peux réessayer et tu nous dira si ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    %macro top2;
     
    Data LIMITV_temp6;
    Set LIMITV_temp5;
     Cnt=0 ;
         %DO i = 1 %to &nb_max_cim;
              If CIM&i=" " or CIM&i not =: "H" then Cnt+1;
              if Cnt=&nb_max_cim then not_contains_H= 1; Else not_contains_H=0;
         %end ; 
    Run;
    %MEND TOP2; 
    %TOP2;
    Bon courage
    Ward

  4. #4
    Membre à l'essai
    Femme Profil pro
    Chargée d'étude statistiques
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargée d'étude statistiques
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup pour vos deux propositions!! C'est vraiment extra. Je vais les essayer et je vous dis ça.
    Merci, merci!!!

  5. #5
    Membre à l'essai
    Femme Profil pro
    Chargée d'étude statistiques
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargée d'étude statistiques
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Ça fonctionne vraiment très bien!!!

    Je vous remercie beaucoup!

  6. #6
    Membre à l'essai
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2020
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2020
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Macro SAS
    Bonjour,
    J'ai besoin de créer une macro sas qui permettra d’afficher, les observations ma table de données xyz qui répondront aux critères suivants,
    au choix de l’utilisateur
    - Homme ou Femme, au choix
    - Âge minimal des sujets, au choix
    - Âge maximal des sujets, au choix.
    et il faut que je la teste en considérant deux exemples;

    merci d'avance pour votre aide
    Images attachées Images attachées  

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

Discussions similaires

  1. Boucle macro SAS
    Par oboulot dans le forum Macro
    Réponses: 5
    Dernier message: 05/06/2011, 19h56
  2. Macro SAS: boucles de PROC's
    Par Lameth dans le forum Macro
    Réponses: 9
    Dernier message: 14/09/2009, 17h00
  3. [Macro] procedures ou Macros sas SVM
    Par cyberboy00 dans le forum Macro
    Réponses: 9
    Dernier message: 11/07/2008, 09h35
  4. Boucle dans macro SAS avec BY
    Par fafabzh6 dans le forum Macro
    Réponses: 5
    Dernier message: 17/06/2008, 12h08
  5. exécution de Macro SAS
    Par CélineM dans le forum Macro
    Réponses: 2
    Dernier message: 02/04/2008, 15h06

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