Posts Tagged ‘trier’

h1

L’option NOTSORTED de l’instruction BY : A quoi cela sert-il ?

janvier 24, 2010

Dans une instruction BY, l’option NOTSORTED fait parfois son apparition.

Le résultat de cette option diffère de celui avec un tri préalable.

Voici l’illustration de cette option dans un PROC TRANSPOSE.

1. Les données : SASHELP.CLASS

Le dataset SASHELP.CLASS et plus particulièrement ses variables AGE et WEIGHT servent pour l’exemple.

2. Un usage classique de l’instruction BY

De manière générale, pour utiliser une instruction BY,
il faut que les observations soient triées de la même maniÈre dans le fichier d’entrée.

Ici les données sont triées par AGE.

Comme on ne peut pas modifier les fichiers de la bibliothèque SASHELP,
le résultat après le tri est sauvegardé dans la bibliothèque temporaire WORK.

proc sort data=sashelp.class out=class;
by age;
run;

Puis la mesure de poids (WEIGHT) est transposée.

proc transpose data=class out=class;
var weight;
by age;
run;

On se retrouve donc avec une ligne par AGE.

2. L’option NOTSORTED

L’option NOTSORTED se place en fin d’instruction BY.

proc transpose data=sashelp.class out=class;
var weight;
by age notsorted;
run;

Cette fois-ci à chaque changement d’âge dans le fichier d’origine, une nouvelle ligne est ajoutée dans le fichier de sortie.

Par exemple l’âge des observations 2 et 3 du fichier d’origine se suivent : 13.
Dans le fichier final, une seule ligne sera formée à partir de ces deux fichiers. Le premier poids 84 ira dans la variable COL1 et le second 98 dans la variable COL2.

Le même principe s’applique deux autres fois: observations 4 et 5 avec âge=14, observations 6 et 7 avec âge=12.

Lectures complémentaires

h1

Trier les données par ordre croissant et décroissant

septembre 23, 2008

Pour trier (to sort en anglais) les données d’un tableau SAS dans un ordre croissant ou décroissant, il existe sous SAS deux approches : la première consiste à faire appel à la procédure PROC SORT sur un data set existant, la seconde consiste à ordonner les données sélectionnées dans une procédure PROC SQL.

1. L’exemple

Dans l’exemple ci-dessous, les données du data set CLASS situé dans la bibliothèque SASHELP sont triées selon les valeurs des variables SEX, AGE et NAME.

  1. Variable SEX, ordre croissant : Les données de la variable SEX sont d’abord triées par ordre croissant (increasing order). Les femmes (F pour Female) apparaissent en premier, les hommes (M pour Male) apparaissent en second.
  2. Variable AGE, ordre décroissant : Dans chacun des groupes, les données sont ensuite triées par ordre décroissant d’âge (descreasing order). Les femmes les plus âgées apparaissent en premier et les hommes les plus jeunes en dernier.
  3. Variable NAME, ordre décroissant : Enfin quand plusieurs personnes du même sexe et du même âge appaissent, les données sont triées par ordre alphabétique inverse.

2. Trier par ordre décroissant

Deux mots-clés différents : Pour trier les données par ordre décroissant, chaque variable doit être accompagnée d’un mot-clé. Il s’agit de DESCENDING avec PROC SORT et DESC avec PROC SQL.

Deux mot-clés situés à des endroits différents : Dans le cas de PROC SORT, ce mot DESCDENDING apparaît avant le nom de la variable. Dans le cas de la PROC SQL, DESC suit la variable

3. La procédure PROC SORT

Les data sets de la bibliothèque SASHELP sont des données figées par SAS. Elles ne peuvent donc pas être modifiées. C’est pourquoi dans l’exemple, un nouveau data set CLASS est créé dans la bibliothèque WORK grâce à OUT=.

proc sort data=sashelp.class out=class;
by sex descending age descending name;
run;

Un PROC PRINT suffira pour afficher les trois variables ou toutes les variables triées. NOOBS enlèvera le numéro des observations qui appraissent par défaut.

proc print data=class noobs;
*var sex age name;
run;

4. La procédure SQL

proc sql;
select sex, age, name
from sashelp.class
order by sex, age desc, name desc;
quit;

Rappel : Pour afficher toutes les variables remplacées la liste de SELECT par une étoile (*). Pour créer un data set, ajoutez CREATE TABLE class AS.

5. Le résultat

sex  age  name

F   15   Mary
F   15   Janet
F   14   Judy
F   14   Carol
F   13   Barbara
F   13   Alice
F   12   Louise
F   12   Jane
F   11   Joyce
M   16   Philip
M   15   William
M   15   Ronald
M   14   Henry
M   14   Alfred
M   13   Jefrrey
M   12   Robert
M   12   John
M   12   James
M   11   Thomas