bonjour je me trouve devant un projet ou je trouve des dificultées. quelqu'un peut m'aider?? et merci
Il faut recoder une variable dans une table qui est énorme. La table, qui s’appelle Table, est par exemple comme suit.
Id x y Code
2351 12,34 76,50 AZ
8963 32,12 16,20 AF
Il faut cependant imaginer que cette table contient des millions d’observations. La variable Code doit être recodée. Les nouveaux codes sont enregistrés dans la table Sas
TableRecodage :
Code Nouveau
AZ BJ
AF QR
. . .
Il faudrait trier les deux tables en fonction de la variable Code :
Puis ensuite utiliser une instruction MERGE dans une étape
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 PROC sort DATA = Table OUT = TableT ; BY Code ; RUN ; PROC sort DATA = TableRecodage OUT = TableRecodageT ; BY Code ; RUN ;Il vous faut trouver une solution qui évite le tri de la table Table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DATA : DATA NouvelleTable ; MERGE TableT TableRecodageT ; BY Code ; Code = Nouveau ; DROP Nouveau ; RUN ;
Vous pouvez dans un premier temps constituer deux tables Sas, la première avec
les anciennes valeurs de la variable à recoder, la seconde avec les nouvelles valeurs :
Ensuite, le début de l’étape DATA pour recoder serait comme suit (en supposant
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 DATA AnciennesValeurs NouvellesValeurs ; LENGTH Id $ 9 ; SET TableRecodage ; Id = "Ancien" || LEFT(_N_) ; Valeur = Code ; OUTPUT AnciennesValeurs ; Id = "Nouveau" || LEFT(_N_) ; Valeur = Nouveau ; OUTPUT NouvellesValeurs ; KEEP Id Valeur ; RUN ; PROC transpose DATA = AnciennesValeurs OUT = AnciennesValeursTransp ; VAR Valeur ; ID Id ; RUN ; PROC transpose DATA = NouvellesValeurs OUT = NouvellesValeursTransp ; VAR Valeur ; ID Id ; RUN ;
que la table de recodage comporte 45 observations) :
Enfin, il vous reste à programmer une recherche dans le vecteur AnciennesValeurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 DATA NouvelleTable ; IF _N_ EQ 1 THEN DO ; SET AnciennesValeursTransp ; ARRAY AnciennesValeurs Ancien1 - Ancien45 ; SET NouvellesValeursTransp ; ARRAY NouvellesValeurs Nouveau1 - Nouveau45 ; END ; SET Table ; ... RUN ;
pour trouver la valeur de la variable Code afin de la remplacer par sa nouvelle valeur.
Une autre solution repose sur l’utilisation de la PROC format en utilisant un format dynamique.
Partager