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 -
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
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:
- If sas
- If then do else - Meilleures réponses
- If then do sas - Meilleures réponses
- Free sas c'est quoi - Forum Virus
- Prélèvement par Free sans avoir souscrit ✓ - Forum Réseaux sociaux
- Freebox sas c'est quoi - Forum Freebox
- Meetic sas prélèvement ✓ - Forum Vos droits sur internet
- If exist ✓ - Forum Autoit / batch
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)
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)