Bonjour,
Je dispose de la table suivante :
Le code ci-dessous permet de regrouper dans une seule colonne les 4 valeurs (janvier, février, mars, avril) d'une même variable :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 DATA test; INPUT Nom $ A_janv A_fevr A_mars A_avri B_janv B_fevr B_mars B_avri C_janv C_fevr C_mars C_avri D_janv D_fevr D_mars D_avri Age Ville $; CARDS; Pierre 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27 28 2 Paris Josette 31 32 33 34 35 36 37 38 41 42 43 44 45 46 47 48 3 Toulon Gabriel 51 52 53 54 55 56 57 58 61 62 63 64 65 66 67 68 1 Brest Henri 71 72 73 74 75 76 77 78 81 82 83 84 85 86 87 88 5 Bordeaux ; RUN;
Mon problème est que j'ai beaucoup de variables pour lesquelles je dispose des valeurs de janvier, février, mars, avril.
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 DATA test1(DROP = A_: B_: C_: D_: i Calendrier); SET test; ARRAY a {*} A_:; ARRAY b {*} B_:; ARRAY c {*} C_:; ARRAY d {*} D_:; Calendrier = 'Janvier Février Mars Avril'; DO i=1 TO dim(a); Mois = scan(Calendrier,i,' '); Var_A = a(i); Var_B = b(i); Var_C = c(i); Var_D = d(i); OUTPUT; END; RUN;
Je cherche donc à automatiser le code.
Je pensais à créer une boucle avec un seul array qui ne traite qu'un groupe de 4 variables en même temps. Un truc dans le genre :
Ce code ne fonctionne pas et ne traduit d'ailleurs pas franchement ce que je
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 PROC CONTENTS DATA = test OUT = colonne NOPRINT; RUN; PROC SQL NOPRINT; SELECT name INTO :old_var separated BY ' ' FROM colonne WHERE substr(name, INDEX(name, '_')); SELECT substr(name, INDEX(name, '_')+1) INTO :calendrier separated BY ' ' FROM colonne WHERE substr(name, INDEX(name, '_')); SELECT substr(name, 1, INDEX(name, '_')-1) INTO :new_var separated BY ' ' FROM colonne WHERE substr(name, INDEX(name, '_')); SELECT count (*) INTO :nbr FROM colonne WHERE substr(name, INDEX(name, '_')); QUIT; %MACRO TEST; DATA test1; SET test; ARRAY x {&nbr.} &old_var:; %DO i=1 %TO &nbr.; x(i) = &&new_var&i Mois(i) = %scan("&calendrier",&i,' '); OUTPUT; %END; RUN; %MEND TEST; %TEST;
cherche à faire mais je m'emmêle un peu les pinceaux !
Help !?
Partager