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

Discussion: Boucle et macro SAS

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chargée d'étude statistiques
    Inscrit en
    mai 2019
    Messages
    7
    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 : 7
    Points : 9
    Points
    9

    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
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : juillet 2011
    Messages : 448
    Points : 1 092
    Points
    1 092
    Billets dans le blog
    13

    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
    447
    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 : 447
    Points : 1 479
    Points
    1 479

    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
    Futur Membre du Club
    Femme Profil pro
    Chargée d'étude statistiques
    Inscrit en
    mai 2019
    Messages
    7
    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 : 7
    Points : 9
    Points
    9

    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
    Futur Membre du Club
    Femme Profil pro
    Chargée d'étude statistiques
    Inscrit en
    mai 2019
    Messages
    7
    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 : 7
    Points : 9
    Points
    9

    Par défaut

    Ça fonctionne vraiment très bien!!!

    Je vous remercie beaucoup!

+ 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