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
    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é
    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.fr/certifications/session-decembre-2015-niveau-avance?uid=162

  3. #3
    Membre expérimenté
    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
    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
    Ça fonctionne vraiment très bien!!!

    Je vous remercie beaucoup!

  6. #6
    Membre à l'essai
    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

###raw>template_hook.ano_emploi###