Bonjour,
J'ai un problème dont une partie a déjà été abordé mais je n'ai pas réussi à mettre en application les réponses proposés par jerome_pdv2 notamment http://www.developpez.net/forums/d13...ucle-do-while/
Pour mieux comprendre je vais partir d'un exemple et non de mes réelles données.
Je dispose de 2 table sas :
- Une noté tab_base avec une colonne individu et une colonne age
- Et une 2ème noté tab_opt avec les options que je souhaite vérifier dans la table base (Je souhaite vérifier que l'option sur l'âge correspond à au moins 2 individus).
- Je fais une boucle sur le _n_, le problème est qu'il supprime des individus et donc il passe à _n_ =2 alors que l'option à _n_ = 1 n'a pas été vérifié (décalage)
- Étant donné que je souhaite que mon programme supprime des lignes dont l'option ne correspond pas à au moins 2 individus, il n’atteint pas la dernière ligne et produit donc une erreur.
J'ai crée un programme résumant mon exemple.
Tab_opt donne:
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 data tab_base; input id age; cards; 1 30 2 31 3 32 4 32 5 33 ; run; data tab_opt; input option $ age; cards; age=30 30 age=31 31 age=32 32 age=33 33 age=34 34 age=36 36 age=37 37 ; run; %macro abc; data _null_; set tab_opt; call symputx('eof',put(_n_,8.),'G'); run; %put &eof; %do i=1 %to &eof.; data _null_; set tab_opt; if _n_ eq &i. then do; call symput(compress("opt&i."),option); end; run; %put &&opt&i; proc sql; create TABLE X_SQL as select count(id) as nb from tab_base where &&opt&i.; quit; %let N1=0; data _null_; set X_SQL; call symput("N1",nb); run; %put &N1; %if &N1 lt 2 %then %do; data tab_opt; set tab_opt; where not (&&opt&i.); run; %end; data _null_; set tab_opt; call symputx('eof',put(_n_,8.),'G'); run; %put &eof; %end; * to eof; %mend abc; %abc;
option age
age=31 31
age=32 32
age=37 37
Par rapport à mon premier problème je n'aurai pas du garder dans cette table les lignes "age=31 31" et "age=37 37".
Et concernant mon deuxième problème, ma log me donne :
Car ma table a été réduite depuis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 WARNING: Apparent symbolic reference OPT7 not resolved. ERROR: Syntax error while parsing WHERE clause.
Merci par avance.
Bien cordialement,
Alex
Partager