Publié le :
Statistique SASHELP | EXTERNE

Réordonner les variables d'un jeu de données par corrélation

En attente de validation
La macro CORDER réorganise les variables d'un jeu de données d'entrée. Elle utilise PROC PRINCOMP pour analyser les corrélations entre les variables spécifiées, calcule les composantes principales, puis transpose et trie ces résultats pour déterminer un nouvel ordre des variables. Cet ordre est ensuite appliqué lors de la création du jeu de données de sortie, où les variables spécifiées sont réordonnées et d'autres variables peuvent être copiées.
Analyse des données

Type : SASHELP | EXTERNE


Le script prend un jeu de données d'entrée via le paramètre DATA. Ce jeu de données peut provenir de SASHELP ou être un jeu de données externe géré par l'utilisateur. Les variables à analyser sont spécifiées par le paramètre VAR, et d'autres variables à conserver sont spécifiées par COPY.

1 Bloc de code
MACRO DEFINITION
Explication :
Définit la macro CORDER avec les paramètres DATA, VAR, COPY, ORDERBY, COV, OUT. La macro utilise l'analyse en composantes principales (PROC PRINCOMP) pour déterminer un nouvel ordre des variables basé sur leurs corrélations.
Copié !
1/*--------------------------------------------------------------*
2 * Name: corder.sas *
3 * Title: Reorder variables in a data set by correlations *
4 * Doc: http://www.math.yorku.ca/SCS/sasmac/nodoc.html *
5 *--------------------------------------------------------------*
6 * Author: Michael Friendly <friendly @yorku.ca> *
7 * Created: 15 Dec 1999 15:33:48 *
8 * Revised: 15 Dec 1999 15:33:48 *
9 * Version: 1.0 *
10 * *
11 *--------------------------------------------------------------*/
12 /*=
13=Description:
14
15The CORDER macro
16 
17=Usage:
18 
19 The CORDER macro is defined with keyword parameters.
20 The arguments may be listed within parentheses in any order, separated
21 by commas. For example:
22
23 %corder();
24
25==Parameters:
26 
27* DATA= The name of the input data set [Default: DATA=_LAST_]
28 
29* VAR= List of variables to be reordered
30 
31* COPY= Other variables to be copied
32 
33* ORDERBY= Order by PRINn or ANGLE [Default: ORDERBY=PRIN1]
34 
35* COV= What to analyze?
36 
37* OUT= Name of output data set [Default: OUT=CORDER]
38
39 =*/
40%macro corder(
41 DATA=_last_,
42 var=, /* list of variables to be reordered */
43 copy=, /* other variables to be copied */
44 orderby=PRIN1, /* order by PRINn or ANGLE */
45 cov=COV, /* reset to null to analyze correlations */
46 out=corder, /* name of output data set */
47 );
48 
49 
2 Bloc de code
PROC PRINCOMP
Explication :
Calcule les composantes principales (scores) pour les variables spécifiées dans le jeu de données d'entrée. Les résultats sont stockés dans le jeu de données temporaire _comp_.
Copié !
1 /*---------------------------------------*
2 | Re-order vars by PRIN |
3 *---------------------------------------*/
4 %let orderby=%upcase(&orderby);
5 PROC PRINCOMP DATA=&DATA &cov outstat=_comp_ noprint;
6 var &var;
7
3 Bloc de code
DATA STEP Data
Explication :
Filtre le jeu de données de statistiques pour ne garder que les lignes de score, puis réinitialise les variables pour la transposition. Ce bloc crée un jeu de données intermédiaire '_comp_'.
Copié !
1 
2DATA _comp_;
3 SET _comp_;
4 where _type_='SCORE';
5 drop _name_ _type_;
6 
4 Bloc de code
PROC TRANSPOSE Data
Explication :
Transposition des données de scores pour préparer l'extraction des noms de variables triés. Chaque variable devient une ligne. Ce bloc modifie/crée le jeu de données intermédiaire '_comp_'.
Copié !
1 
2PROC TRANSPOSE
3DATA=_comp_ out=_comp_ prefix=prin;
4 
5 Bloc de code
DATA STEP Data
Explication :
Si l'option ORDERBY est 'ANGLE', calcule l'angle des composantes principales (prin1, prin2) pour définir l'ordre. Ce bloc peut modifier le jeu de données intermédiaire '_comp_'.
Copié !
1 
2 %IF &orderby=ANGLE %THEN %DO;
3 DATA _comp_;
4 SET _comp_;
5 angle = atan(prin2/prin1);
6 %END;
7 
6 Bloc de code
PROC SORT
Explication :
Trie les données transformées selon le critère spécifié par ORDERBY pour définir l'ordre final des variables. Cette étape prépare les données pour l'extraction des noms.
Copié !
1 
2 PROC SORT;
3 BY &orderby;
4
7 Bloc de code
DATA STEP
Explication :
Extrait les noms des variables triées et les stocke dans la macro variable 'var' pour être utilisée dans la création du jeu de données final. Ce bloc ne crée pas de jeu de données SAS mais une macro variable.
Copié !
1 
2 DATA _null_;
3 SET _comp_ END=eof;
4 LENGTH vars $200;
5 retain vars;
6 IF _n_=1
7 THEN vars = _name_;
8 ELSE vars = trim(vars) || ' ' || _name_;
9 IF eof THEN call symput('var', trim(vars));
10 RUN;
11 
8 Bloc de code
DATA STEP Data
Explication :
Crée le jeu de données de sortie '&out' en spécifiant le nouvel ordre des variables (déterminé par la macro variable 'var') et en incluant les variables à copier ('&copy') à partir du jeu de données d'entrée '&data'. La macro se termine ici.
Copié !
1 
2DATA &out;
3 retain &var ©
4 SET &DATA;
5 %global vorder;
6 %let vorder = &var;
7%mend;
8 
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« Techniquement, la macro %CORDER illustre une technique SAS robuste : l'utilisation du RETAIN couplé à une liste de variables générée dynamiquement par CALL SYMPUT.

En réorganisant le vecteur de colonnes (PDV - Program Data Vector) avant l'instruction SET, elle modifie l'ordre physique des variables dans la table de sortie sans altérer les données elles-mêmes. Le nettoyage des tables temporaires comme _comp_ et la conservation des variables via le paramètre COPY en font un outil 'prêt à l'emploi' pour industrialiser le nettoyage de tables larges avant leur livraison à des data scientists »