Bonjour,
J’ai pour objectif de créer un programme sas qui permette de créer autant de tables que de combinaisons de valeur possible entre 3 variables et n observations. En d’autres termes l’objectif, est que si l’on à 3 variables A, B, et C (pouvant chacune prendre les valeurs 0 et 1) ainsi que 4 individus, le programme permette d’obtenir des croissements existant, du genre
Ainsi de suite.
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 Table1 A B C Indv1 0 0 0 Indv2 0 0 0 Indv3 0 0 0 Indv4 0 0 0 Table 2 A B C Indv1 0 1 0 Indv2 0 0 0 Indv3 0 0 0 Indv4 0 0 0 Table 3 A B C Indv1 0 0 0 Indv2 0 0 1 Indv3 0 0 0 Indv4 0 0 0
Concrètement j’ai réalisé les programmes suivant :
Et obtient des tables du genre :
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 data _null_ ; set popi; call symput ("maxprofil", _N_ ); run; %put %sysevalf(&maxprofil); Pour obtenir le nombre dindividu ayant des caractéristiques différentes dans ma table popi. Par la suite soit jexécute : %macro simu; %do i = 0 %to 10 %by 5 ; %do j = 0 %to 10 %by 2 ; %do k = 0 %to 10 ; data table&i&j&k; do profil = 1 to %sysevalf(&maxprofil); do mortabst = &i/10; do mortexp = &j/10; do exp= &k/10; output; end; end; end; end; run; %end; %end; %end; %mend simu; %simu;
J’ai donc bien l’ensemble des combinaisons possibles entre variables, mais les combinaissons sont identiques pour tout les individus ou profil.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Table 1 Mortabst mort exp exp Indv1 0 0 1 Indv2 0 0 1 Indv3 0 0 1 Indv4 0 0 1 Table 2 Mortabst mort exp exp Indv1 0 1 1 Indv2 0 1 1 Indv3 0 1 1 Indv4 0 1 1
Soit j’exécute :
Et obtient :
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 %macro simu2; %do i = 0 %to 10 %by 5 ; %do j = 0 %to 10 %by 2 ; %do k = 0 %to 10 ; data table&i&j&k; do mortabst = &i/10; do mortexp = &j/10; do exp= &k/10; output; end; end; end; run; %end; %end; %end; %mend simu; %simu2;
mais il me faudrait alors compiler les différents profils de manière à avoir l’ensemble des combinaison possible entre individus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Table 1 Mortabst mort exp exp Indv1 0 1 1 Table 5 Mortabst mort exp exp Indv2 1 0 1
Voilà, voilà, j’espère être clair et que quelqu’un connaît une solution à ce problème ou même me proposer une autre orientation dans ma réflexion.
Merci de l’intérêt que vous y porterez.
Bonne journée.
Partager