Bonjour tout le monde,
Cela fait plusieurs jours que je joue avec les tables de hachage et j'ai des difficultés à "traduire" certaines jointures écrites en sql. Je cherche notamment à joindre une table principale à une table finale en passant par une table intermédiaire. Si ce n'est pas clair, le code suivant devrait l'être :
Pourriez-vous me dire, si c'est possible, comment modifier le code suivant pour intégrer la seconde jointure ?
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 DATA large; INPUT id gender $; DATALINES; 1 F 2 M 3 F 4 F 5 M 6 G 7 M 8 P 9 F ; DATA small_link; INPUT gender $ key; DATALINES; F 1 M 2 G 4 ; DATA small_final; INPUT key final; DATALINES; 1 111 2 222 ; proc sql; create table want as select a.*, b.key, c.final from large a left join small_link b on (a.gender = b.gender) left join small_final c on (b.key = c.key); quit;
Je sais que je peux obtenir le résultat souhaité avec deux étapes data mais je souhaite optimiser mon code si cela est possible, d'autant plus que cette jointure n'est qu'une étape parmi d'autres.
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 data almost_want (drop=rc); declare hash VS (); rc = VS.DefineKey ('gender'); rc = VS.DefineData ('key'); rc = VS.DefineDone (); declare hash VS2 (); rc = VS2.DefineKey ('key'); rc = VS2.DefineData ('final'); rc = VS2.DefineDone (); do until (eof1); set small_link end = eof1; rc = VS.add (); end; do until (eof2); set small_final end = eof2; rc = VS2.add (); end; do until (eof99) ; set large end = eof99; call missing(key, final); rc = VS.find (); output; end; stop; run;
Par ailleurs, si vous avez des remarques ou suggestions sur le code, n'hésitez pas, je suis encore débutant en SAS .
PS : J'ai initialement voulu poster ce message sur le site communities.sas.com (d'où les mots anglais dans le code) mais après inscription, je n'ai pas pu créer de nouveau post (plus précisément, je ne peux pas sélectionner de board lors de la création d'un nouveau post) ni répondre à des posts existants. Si quelqu'un a une solution à ce problème, je suis également preneur.
PS 2 : J'ai eu du mal à trouver un titre, je suis ouvert à toute amélioration pour rendre la recherche par d'autres personnes plus efficace.
Partager