Publié le :
ETL MIXTE

Collection d'exemples de code SAS

En attente de validation
Ce script est une compilation d'exemples indépendants. Il montre comment créer et manipuler des tables SAS©, comment diviser une table en plusieurs, comment utiliser les formats personnalisés pour du reporting, comment calculer des statistiques de base avec PROC MEANS, et illustre des cas d'erreurs courants comme les conversions de types ou les calculs avec des valeurs manquantes. Chaque bloc de code est un cas d'usage spécifique.
Analyse des données

Type : MIXTE


Les données sont soit créées directement dans le code à l'aide de 'Datalines', soit proviennent de la bibliothèque standard 'SASHELP' (tables 'class' et 'air'). Le premier exemple avec 'sasuser.one' est conçu pour générer une erreur et ne dépend pas d'une source externe.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc tente de créer une table 'sasuser.one' mais l'instruction 'output' référence 'one' (implicitement 'work.one'), ce qui n'est pas déclaré dans l'instruction 'data'. Cela génère une erreur de syntaxe et le DATA STEP s'arrête.
Copié !
1DATA sasuser.one;
2x=1;
3y=27;
4 OUTPUT one;
5RUN;
2 Bloc de code
DATA STEP Data
Explication :
Création d'une table de travail 'CLASS' en lisant des données directement incluses dans le code (instream data) via une carte de données 'Datalines'.
Copié !
1DATA CLASS;
2INPUT Name $ Gender $ Age;
3DATALINES;
4 Anna F 23
5 Ben M 25
6 Bob M 21
7 Brian M 27
8 Edward M 26
9 Emma F 32
10 Joe M 34
11 Sam F 32
12 Tom M 24
13;
14RUN;
3 Bloc de code
DATA STEP Data
Explication :
Ce DATA STEP lit la table 'WORK.CLASS' et la divise en deux tables : 'WORK.MALES' pour les hommes et 'WORK.FEMALES' pour les femmes. La variable 'age' est supprimée de la table 'FEMALES' et la variable 'gender' est supprimée des deux tables de sortie.
Copié !
1DATA WORK.MALES WORK.FEMALES(drop=age);
2 SET WORK.CLASS;
3 drop gender; /* the position of the drop does not effect the result */
4 IF Gender="M" THEN OUTPUT WORK.MALES;
5 ELSE IF Gender="F" THEN OUTPUT WORK.FEMALES;
6RUN;
4 Bloc de code
DATA STEP Data
Explication :
Après avoir créé la table 'sales_d', un second DATA STEP la traite. Il utilise un tableau (array) 'month' pour regrouper les variables de ventes. Une valeur est mise à manquant pour illustrer que l'addition simple (+) propage les valeurs manquantes, tandis que la fonction SUM les ignore dans le calcul.
Copié !
1DATA sales_d;
2INPUT SalesID $ SalesJan FebSales MarchAmt;
3DATALINES;
4W6790 50 400 350
5W7693 25 100 125
6W1387 23 300 250
7;
8RUN;
9DATA qtr1;
10SET sales_d;
11array month{3} SalesJan FebSales MarchAmt;
12IF salesid ='W1387' THEN salesjan =.;
13Qtr_1 = month{1} + month{2} +month{3}; *does not work on missing values;
14Qtr = sum(of month{*});
15RUN;
5 Bloc de code
DATA STEP Data
Explication :
Crée une table 'output' en sélectionnant des observations de 'sashelp.class'. Une nouvelle variable 'BMI' est calculée, puis une instruction 'IF' (subsetting IF) est utilisée pour ne conserver que les observations où le BMI est supérieur ou égal à 20.
Copié !
1DATA OUTPUT;
2SET sashelp.class;
3 BMI=(weight*703)/Height**2;
4 IF bmi ge 20; /* use IF when a new var is not declared*/
5 RUN;
6 Bloc de code
DATA STEP Data
Explication :
Ce DATA STEP illustre une boucle 'DO'. La variable 'x' est écrasée à chaque itération. À la fin de la boucle, 'index' vaut 7 (la première valeur qui dépasse la limite de 5), mais la dernière valeur assignée à 'x' est 5. La table 'loop' contiendra une seule observation avec la valeur finale de x.
Copié !
1DATA loop;
2x=0;
3DO index =1 to 5 BY 2; /* index: 1 3 5 7 */
4 x=index; /*. x: 1 3 5 */
5END;
6RUN;
7 Bloc de code
DATA STEP Data
Explication :
Démonstration de la lecture de données numériques. SAS interprète correctement la valeur '+35.' comme le nombre 35 lors de la lecture des données.
Copié !
1DATA test1;
2INPUT name $ age;
3DATALINES;
4John +35. /* either '+' or '-' works */
5RUN;
8 Bloc de code
PROC MEANS
Explication :
Calcule les statistiques descriptives par défaut (N, moyenne, écart-type, min, max) pour la variable 'air' de la table 'sashelp.air'.
Copié !
1PROC MEANS DATA = sashelp.air;
2var air;
3RUN;
9 Bloc de code
PROC REPORT
Explication :
Crée un format personnalisé 'score' avec PROC FORMAT pour catégoriser les notes. Ensuite, PROC REPORT est utilisé pour afficher la variable 'exam' en appliquant ce format, affichant 'Pass' au lieu de 50.1.
Copié !
1DATA course;
2INPUT exam;
3DATALINES;
450.1
5; RUN;
6PROC FORMAT;
7value
8score 1 - 50 = 'Fail'
9 51 - 100 = 'Pass';
10 RUN;
11PROC REPORT DATA =course nowd;
12column exam;
13define exam / display FORMAT=score.;
14RUN;
10 Bloc de code
PROC MEANS
Explication :
Un format 'agegrp' est créé pour grouper les âges. PROC MEANS est ensuite utilisé pour calculer des statistiques sur la variable 'Height', groupées par 'Sex' et par les groupes d'âge définis par le format 'agegrp'.
Copié !
1PROC FORMAT;
2value agegrp
3low-12 ='Pre-Teen'
413-high = 'Teen';
5RUN;
6PROC MEANS DATA=SASHELP.CLASS min max mean maxdec=1;
7var Height;
8class Sex Age;
9FORMAT Age agegrp.;
10RUN;
11 Bloc de code
DATA STEP Data
Explication :
Illustre une erreur de conversion de type. La variable 'cost' est initialisée comme une chaîne de caractères à cause des symboles '$' et ','. La multiplication par 0.1 échoue car 'cost' ne peut pas être converti automatiquement en numérique. 'discount' aura une valeur manquante.
Copié !
1DATA work.retail;
2cost = "$20,000";
3discount = 0.1*cost;
4RUN;
12 Bloc de code
DATA STEP Data
Explication :
Démonstration des fonctions de date SAS. La fonction MDY crée une valeur de date SAS à partir du mois, du jour et de l'année. Les fonctions DAY, MONTH, YEAR et WEEKDAY extraient les parties correspondantes de cette date. La date SAS numérique 'x' est affichée dans un format lisible 'Date9.'.
Copié !
1DATA work.date;
2x =mdy('01', '01', '1960');
3day = day(x);
4month = month(x);
5year = year(x);
6weekday = weekday(x);
7FORMAT x Date9.;
8RUN;
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.