Le script génère deux tables (STUDENT et TEST) via des données en ligne (DATALINES). Il trie ces tables par identifiant (ID) puis effectue deux fusions distinctes. La première fusion (roster) conserve toutes les données en signalant les noms manquants. La seconde (new_roster) ne conserve que les étudiants ayant passé le test, gère les cas d'absence dans le fichier étudiant, et extrait le nom de famille pour un tri final.
Analyse des données
Type : CREATION_INTERNE
Les données sont directement intégrées dans le code via l'instruction DATALINES.
1 Bloc de code
DATA STEP Data
Explication : Création de la table STUDENT avec ID et NAME (format long $30) à partir des données in-stream.
Copié !
DATA STUDENT;
INPUT ID NAME & $30.;
DATALINES;
1 John Torres 5 Alex Antoniou 3 Thomas Friend
2 Sheldon Goldstein 11 Joanne Dipietro 12 Bill Murray
21 Janet Reno 4 Deborah Smith 6 Don Dubin 7 Alice Ford
8 Diane Farley 9 Laura Easton 10 Brian Fishmann
13 Eric Garrett 14 James Galt 15 Toni Gilman
;
1
DATA STUDENT;
2
INPUT ID NAME & $30.;
3
DATALINES;
4
1 John Torres 5 Alex Antoniou 3 Thomas Friend
5
2 Sheldon Goldstein 11 Joanne Dipietro 12 Bill Murray
6
21 Janet Reno 4 Deborah Smith 6 Don Dubin 7 Alice Ford
7
8 Diane Farley 9 Laura Easton 10 Brian Fishmann
8
13 Eric Garrett 14 James Galt 15 Toni Gilman
9
;
2 Bloc de code
DATA STEP Data
Explication : Création de la table TEST avec ID et SCORE à partir des données in-stream.
Explication : Tri des deux tables par la clé de jointure ID.
Copié !
proc sort data=STUDENT;
by ID;
run;
proc sort data=TEST;
by ID;
run;
1
PROC SORTDATA=STUDENT;
2
BY ID;
3
RUN;
4
5
PROC SORTDATA=TEST;
6
BY ID;
7
RUN;
4 Bloc de code
DATA STEP Data
Explication : Fusion (Merge) des tables par ID. Création d'une valeur par défaut pour NAME si l'ID n'est pas présent dans STUDENT.
Copié !
data roster;
merge STUDENT (in=in_student_file) TEST (in=in_test_file);
by ID;
if not in_student_file then NAME='Not in Student File';
run;
1
DATA roster;
2
MERGE STUDENT (in=in_student_file) TEST (in=in_test_file);
3
BY ID;
4
IF not in_student_file THEN NAME='Not in Student File';
5
RUN;
5 Bloc de code
DATA STEP Data
Explication : Seconde fusion filtrant les enregistrements (subsetting IF) pour ne garder que ceux présents dans TEST. Extraction du dernier mot de NAME vers la variable 'last'.
Copié !
data new_roster;
merge STUDENT (in=in_student_file) TEST (in=in_test_file);
by ID;
if in_test_file;
if not in_student_file then do;
NAME='Not in Student File';
last='ZZZ';
end;
else last=scan(NAME, -1);
run;
1
DATA new_roster;
2
MERGE STUDENT (in=in_student_file) TEST (in=in_test_file);
3
BY ID;
4
IF in_test_file;
5
IF not in_student_file THENDO;
6
NAME='Not in Student File';
7
last='ZZZ';
8
END;
9
ELSE last=scan(NAME, -1);
10
RUN;
6 Bloc de code
PROC SORT
Explication : Tri de la table résultante new_roster par nom de famille.
Copié !
proc sort data=new_roster;
by last;
run;
1
PROC SORTDATA=new_roster;
2
BY last;
3
RUN;
7 Bloc de code
PROC PRINT
Explication : Affichage des rapports finaux.
Copié !
proc print data=roster;
title'Problem 14.8a';
id NAME;
run;
proc print data=new_roster;
title'Problem 14.8b';
id NAME;
var ID SCORE;
run;
1
PROC PRINTDATA=roster;
2
title'Problem 14.8a';
3
id NAME;
4
RUN;
5
6
PROC PRINTDATA=new_roster;
7
title'Problem 14.8b';
8
id NAME;
9
var ID SCORE;
10
RUN;
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.
Informations de Copyright : Copyright (c) 2016 Scott Bass (sas_l_739@yahoo.com.au) - Detecté dans le fichier référencé TEMPLATE.sas
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.