Boucle SAS If/Then/Else

Fermé
informatique_pour_les_nuls Messages postés 4 Date d'inscription jeudi 17 juin 2010 Statut Membre Dernière intervention 15 septembre 2010 - 2 août 2010 à 21:31
informatique_pour_les_nuls Messages postés 4 Date d'inscription jeudi 17 juin 2010 Statut Membre Dernière intervention 15 septembre 2010 - 15 sept. 2010 à 10:59
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


A voir également:

2 réponses

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