Bonjour à tous,
Je me casse la tête depuis ce matin, j'aimerais faire ça en SQL (pas de proc transpose ou merge) mais je n'y arrive pas.
Merci d'avance de prendre un peu de votre temps.
Version imprimable
Bonjour à tous,
Je me casse la tête depuis ce matin, j'aimerais faire ça en SQL (pas de proc transpose ou merge) mais je n'y arrive pas.
Merci d'avance de prendre un peu de votre temps.
Bonjour,
Je te propose cette solution:
CordialementCode:
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 option mprint mlogic symbolgen; data test; input id type $ count; cards; 111 gness 45 111 brehat 90 111 bt 90 111 bat 90 112 gness 45 112 brehat 90 112 bt 90 ; run; proc sql; create table test as select * from test order by id, type; quit; %macro tt; proc sql noprint; select count(distinct id) into :n_id from test; select distinct id into :col1 -:col%left(&n_id) from test; quit; %do i=1 %to &n_id; proc sql; create table test1&&col&i as select id ,type,count , monotonic() as nbr from test where id=&&col&i ; proc sql noprint; select count(id) into:n_id_r from test1&&col&i;quit; proc sql; proc sql; select distinct (type) into :type1 -:type%left(&n_id_r) from test1&&col&i; quit; %do j=1 %to &n_id_r; proc sql; create table test_1_&j._&&col&i as select id , count as &&type&j. from test1&&col&i where nbr=&j. ; %end; %end; %mend; %tt; data fin ; merge test_1_: ; by id; run;
Bonjour Brahim,
Merci pour ta solution mais la difficulté est de faire ça tout en SQL dans une même requête.
Merci quand même
Bonjour,
Je ne sais pas si le sujet est toujours d'actualité mais voici une réponse possible.
Elle sera utile si tu n'a pas beaucoup de modalités dans ta variable "Type", sinon ça risque d'être fastidieux à écrire !Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 data test; input id type $ count; cards; 111 gness 45 111 brehat 90 111 bt 90 111 bat 90 112 gness 45 112 brehat 100 112 bt 10 ; run; Proc sql; create table test2 as select distinct a.id , (select count from test b where b.id = a.id and type = "gness") as gness , (select count from test b where b.id = a.id and type = "brehat") as brehat , (select count from test b where b.id = a.id and type = "bt") as bt, (select count from test b where b.id = a.id and type = "bat") as bat from test a; quit;
Flo00154