Publié le :
ETL CREATION_INTERNE

Restructuration de tables SAS (Large vers Long et inversement)

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script pédagogique illustre deux techniques fondamentales de manipulation de données. Premièrement, il transforme un jeu de données 'large' contenant des poids de bébés à différents mois (colonnes weight3, weight6, etc.) en un format 'long' (une ligne par mois par bébé) en utilisant des tableaux (ARRAY) et une boucle itérative dans une étape DATA. Deuxièmement, il montre comment revenir au format 'large' en utilisant la procédure TRANSPOSE, en détaillant les étapes successives pour affiner le résultat (utilisation de BY, ID, et PREFIX).
Analyse des données

Type : CREATION_INTERNE


Les données 'baby_weight' sont générées statiquement dans le script via l'instruction DATALINES.

1 Bloc de code
DATA STEP Data
Explication :
Création du jeu de données initial 'baby_weight' contenant les identifiants, le genre et les poids mesurés à 3, 6, 9 et 12 mois.
Copié !
1DATA baby_weight;
2 INPUT id gender $ weight3 weight6 weight9 weight12;
3DATALINES;
41001 F 9 13 16 17
51002 F 11 16 17 20
61003 M 17 20 23 24
71004 F 16 18 21 22
81005 M 11 15 16 18
91006 M 17 21 25 26
101007 M 16 17 19 21
111008 F 15 16 18 19
12;
13RUN;
2 Bloc de code
PROC PRINT
Explication :
Affichage des données brutes pour vérification.
Copié !
1PROC PRINT DATA = baby_weight;
2RUN;
3 Bloc de code
DATA STEP Data
Explication :
Transformation 'Large vers Long'. Utilisation de deux tableaux (ARRAY) : un pour les mois fixes et un pour les variables de poids. Une boucle DO itère sur les tableaux et l'instruction OUTPUT génère une ligne pour chaque mois.
Copié !
1DATA baby_weight_long (keep = id gender month weight);
2 SET baby_weight;
3 array months{4} (3 6 9 12);
4 array weights{4} weight3--weight12;
5 DO i = 1 to 4;
6 month = months{i};
7 weight = weights{i};
8 OUTPUT;
9 END;
10RUN;
4 Bloc de code
PROC PRINT
Explication :
Visualisation du résultat restructuré au format long.
Copié !
1PROC PRINT DATA = baby_weight_long;
2RUN;
5 Bloc de code
DATA STEP Data
Explication :
Exemple pédagogique (étape intermédiaire ou incorrecte pour le but final) montrant l'itération sans l'instruction OUTPUT explicite à chaque itération, ce qui ne produit pas la structure 'longue' désirée pour toutes les observations.
Copié !
1DATA baby_weight_long1;
2 SET baby_weight;
3 array weights{4} weight3--weight12;
4 DO i = 1 to 4;
5 weight = weights{i};
6 END;
7RUN;
6 Bloc de code
PROC PRINT
Explication :
Visualisation de l'étape intermédiaire.
Copié !
1PROC PRINT DATA = baby_weight_long1;
2RUN;
7 Bloc de code
PROC SORT Data
Explication :
Tri des données 'longues' par identifiant et mois, prérequis nécessaire pour une transposition correcte ou structurée.
Copié !
1 
2PROC SORT
3DATA = baby_weight_long;
4BY id month;
5RUN;
6 
8 Bloc de code
PROC TRANSPOSE Data
Explication :
Étape 1 de transposition : Tentative basique de transposition sans variables de regroupement (BY), ce qui transpose l'intégralité de la table.
Copié !
1 
2PROC TRANSPOSE
3DATA = baby_weight_long
4out = baby_weight_wide;
5RUN;
6 
9 Bloc de code
PROC TRANSPOSE Data
Explication :
Étape 2 de transposition : Ajout de l'instruction BY 'id' pour transposer les données pour chaque sujet séparément.
Copié !
1PROC TRANSPOSE DATA = baby_weight_long
2 out = baby_weight_wide;
3 BY id;
4RUN;
10 Bloc de code
PROC TRANSPOSE Data
Explication :
Étape 3 de transposition : Ajout de l'instruction ID 'month' pour utiliser les valeurs de la variable 'month' comme suffixes/noms des nouvelles colonnes transposées.
Copié !
1PROC TRANSPOSE DATA = baby_weight_long
2 out = baby_weight_wide;
3 BY id;
4 id month;
5RUN;
11 Bloc de code
PROC TRANSPOSE Data
Explication :
Étape 4 (Finale) : Raffinement de la transposition avec l'option PREFIX='weight' pour nommer les colonnes (ex: weight3, weight6...) et suppression de la colonne automatique _NAME_.
Copié !
1PROC TRANSPOSE DATA = baby_weight_long
2 out = baby_weight_wide (drop = _NAME_)
3 prefix = weight;
4 BY id;
5 id month;
6RUN;
12 Bloc de code
PROC PRINT
Explication :
Visualisation du résultat final de la transposition (retour au format large).
Copié !
1PROC PRINT DATA = baby_weight_wide;
2RUN;
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.
« La restructuration des données est une étape charnière de la préparation analytique, particulièrement dans les études longitudinales. Ce script illustre la dualité entre l'étape DATA pour le passage au format "long" et la PROC TRANSPOSE pour le retour au format "large". L'utilisation des ARRAY (tableaux) dans l'étape DATA est la méthode la plus efficiente pour transformer des colonnes répétitives (poids à 3, 6, 9 mois) en observations distinctes. Cette structure "longue" est indispensable pour la plupart des procédures statistiques et graphiques modernes. À l'inverse, la puissance de la PROC TRANSPOSE réside dans ses options de nommage (PREFIX=) et d'identification (ID), qui permettent de reconstruire une table "large" propre et prête pour un reporting horizontal. »