Transposer un tableau avec la PROC TRANSPOSE

Dans son expression la plus simple, la PROC TRANSPOSE transpose une table, c'est-à-dire transforme les lignes en colonnes. La force de la PROC TRANSPOSE est de pouvoir ne transposer qu'une partie des observations.
La PROC TRANSPOSE ne génère aucune sortie dans l'OUTPUT.

PROC TRANSPOSE data= <options>;
  VAR liste_de_variables;
  BY variable;
  COPY liste_de_variables;
  ID variable;

Les options

L'option out= permet de définir une table en sortie différente de la table prise en entrée.

L'option name= permet de renommer la variable _name_ dans le tableau transposé (variable qui contient le nom de la ou des variables transposées).

L'option prefix= permet de définir un préfixe pour les noms des nouvelles variables du tableau.

Les instructions

L'instruction VAR fournit la liste des variables qui vont être transposées. Ces variables n'existent plus dans le tableau en sortie, et leurs valeurs sont réparties dans les cases appropriées du nouveau tableau.

L'instruction BY permet de définir l'identifiant de l'individu. Chaque modalité de cet identifiant correspondra à une ligne du tableau final.

L'instruction ID permet de définir la variable dont les modalités doivent définir les nouvelles variables du tableau.

L'instruction COPY définit les variables qui sont recopiées telles quelles dans le tableau final.

Exemple

Supposons que l'on dispose de la table notes suivante :

table notes
eleveMatierenote
tataMath15
tataFrançais10
titiMath14
titiFrançais18
totoMath8
totoFrançais12

Et que l'on souhaite obtenir la table notes2 suivante :

table notes2
elevenote_mathnote_francais
tata1510
titi1418
toto812

Alors on écrit le programme suivant :

PROC SORT data=notes ; BY eleve ;
PROC TRANSPOSE data=notes out=notes2;
  VAR note;
  ID matiere;
  BY eleve;
RUN;

Ce programme fournit le résultat suivant :

table notes2
eleve_NAME_mathfran_ais
tatanote1510
titinote1418
totonote812

On obtient presque ce que l'on souhaitait.
L'instruction BY eleve permet bien d'obtenir une ligne par élève.
L'instruction ID matiere définit bien la variable à transposer. La variable matiere n'existe plus, mais a été remplacée par autant de variables qu'il y avait de modalités de matiere. A noter que les caractères spéciaux (ici le ç) ne peuvent être traduits dans le nom de la nouvelle variable (ici il a été remplacé par un _).
Enfin l'instruction VAR note définit le contenu des nouvelles cases : dans mon tableau croisé eleve*matiere, je souhaite mettre la note qui correspond à ce profil.
Une colonne subsidiaire est créée, qui rappelle le nom de la variable que l'on a transposé.