Tableau Disjonctif Complet (TDC): Macro SAS
par , 14/04/2015 à 17h47 (2604 Affichages)
le code ci-dessous crée la macro Disjonctif. Cette macro a pour objectif de créer un tableau disjonctif complet à partir d'un paquet de variables qualitatives. Il s'agit juste de transformer les modalités des variables qualitatives en variables binaires: 1 si l'individu possède la caractéristique et 0 sinon. Après avoir compilé la macro, le code suivant permet de l'exécuter:
Vous n'aurez qu'à mettre le nom de la table des données, les variables qualitatives et la table de sortie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 %Disjonctif(Data=Base, Var= assur age prof niv tm, out=Dich); /*Ce code transforme les modalités des variables assur age prof niv tm de la table Base en variables dichotomiques. Il stocke le résultat dans Dich*/
Cette opération est un peu fréquente dans les analyse multidimensionnelles comme ACM, économétrie des variables qualitatives etc.... D'où l'importance d'avoir une macro pour l'exécuter en un clic!!!
Voici le code de la macro. Vous pouvez laisser vos contributions et critiques en commentaire.
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%Macro Disjonctif(Data= ,Var= ,Out=_Dicotom_out)/STORE DES="Macro permettant de créer des variables dichotomiques à partir d'un paquet de variables qualitatives"; /* CREATION D'UN TABLEAU DISJONCTIF COMPLET*/ proc transpose data=&Data out=_Dicotom_tr; var &var; data _null_; set _Dicotom_tr; call symput (compress("Var"||_n_),_NAME_); call symput ("Nvar",_n_); run; %let Listev= ; %do i=1 %to &nvar; %let Listev=&Listev &&Var&i.*; %end; %let Listev=%substr(&Listev,1,%length(&Listev)-1); proc freq data=&Data noprint; table &Listev/out=_Dicotom_ct; run; Data &out; set &Data; run; %do i=1 %to &nvar; proc sort data=_Dicotom_ct; by &&var&i; data _Null_; set _Dicotom_ct; by &&var&i; retain __Ct 0; if first.&&var&i then __Ct=__Ct+1; if first.&&var&i then do; call symput (compress("Var&i._"||__Ct),&&var&i ); call symput ("Nvar&i",__Ct); end; run; Data &out; set &out; rename &&var&i=__&&var&i; run; %do j=1 %to &&Nvar&i; Data &out; set &out; if __&&var&i="&&Var&i._&j" then Var&i._&j=1; else Var&i._&j=0; label Var&i._&j="&&Var&i._&j"; run; %end; Data &out; set &out; drop __&&var&i; run; %end; proc datasets lib=work nolist; delete _Dicotom_tr _Dicotom_ct; run; %put FIN DE MACRO. SI VOUS AVEZ RENCONTRE DE DIFFICULTES; %PUT ECRIVEZ-MOI SUR: ariel92and@gmail.com; %mend;









