Boucle SAS If/Then/Else

informatique_pour_les_nuls Messages postés 4 Statut Membre -  
informatique_pour_les_nuls Messages postés 4 Statut Membre -
Bonsoir à tous et à toutes,

Voilà mon problème :

Dans un programme sas, je répète plusieurs fois la même partie du programme (sans avoir utilisé de boucle car je ne suis pas parvenu à la faire...) Une table A contient une liste d'individu à analyser. Au fur et à mesure du programme, cette table diminue car les individus ne convenant pas aux critères sont éliminés.
Cependant à la fin du programme je dois en repêcher certains pour parvenir à un nombre suffisant d'individus.

Dans une table B j'ai la liste complète de l'ensemble des individus à analyser. Mais ne sachant pas ou la liste A est complètement vide, j'ai écrit (ou plutôt bidouillé) ce bout de code !!!

DATA B; SET B;
length NUM 3.; NUM=0;
RUN;

DATA A; SET A;
length NUM 3.; NUM=1;
RUN;

DATA LISTE; SET A B;
RUN;

data A; SET LISTE;
IF NUM = 1 THEN ; data A; SET LISTE ; where NUM =1;
ELSE IF NUM = 0 ; data A ; SET LISTE ; where NUM =0;
RUN;

Mais un message d'erreur apparait mais je ne vois pas quoi faire (au niveau du ELSE IF) :

ERREUR 160-185: Pas de clause IF-THEN assortie.

Objectifs:

- Dans table A et B , il y a 10 individus (par exemple)
- Le bout de code doit permettre de faire si dans table A, le nombre d'individus est compris entre 0 et 10 continuer l'analyse avec table A sinon faire une nouvelle table (la table B) et reprendre l'analyse.

Merci d'avance pour votre aide

2 réponses

  1. pauline92
     
    Je ne comprends pas ce que tu veux faire précisément. Pourrais-tu préciser stp, notamment la fin du programme qui se mélange un peu. D'après ce que je comprends, tu devrais obtenir ce que tu veux en faisant cela:

    PROC SQL ;
    CREATE TABLE COUNT_A AS
    SELECT COUNT(*) AS nb
    FROM A;
    QUIT;

    DATA COUNT_A;
    SET COUNT_A;
    CALL SYMPUT ("nb",nb);
    RUN;

    DATA A;
    %IF &nb ne 0 %THEN SET A; %ELSE SET B;
    RUN;

    Si ce n'est pas ce que tu veux, je peux te dire déjà une erreur dans ton programme: ta condition est mal écrite

    Soit tu as 1 instruction et ça donne:
    IF condition THEN instruction_A ;
    ELSE IF condition THEN instruction_B ;

    Soit tu en as plusieurs et ça donne:
    IF condition THEN DO; instructions_C; END;
    ELSE DO; instructions_D; END;

    Dans le instructions_D tu peux à nouveau mettre un IF... THEN...; ELSE...;
    Dans ton cas a priori tu as au moins 3 instructions (DATA A / SET LISTE / WHERE NUM=1)
    0
  2. informatique_pour_les_nuls Messages postés 4 Statut Membre
     
    Merci pauline92 pour ton code et pour les informations sur la construction des conditions.
    0