Publié le :
ETL CREATION_INTERNE

Comparaison des méthodes de définition de longueur de variables

Ce code est également disponible en : Deutsch English Español
En attente de validation
Ce script présente trois approches pour créer une variable conditionnelle 'result' dans une étape Data. Il illustre comment SAS© détermine la longueur d'une variable caractère : implicitement via la première affectation (provoquant une troncature potentielle), implicitement via une chaîne d'espaces, ou explicitement via l'instruction LENGTH (bonne pratique). Il calcule également des moyennes via la fonction MEAN et une formule arithmétique pour montrer la gestion différente des valeurs manquantes.
Analyse des données

Type : CREATION_INTERNE


Les données sont générées directement dans le code via l'instruction DATALINES.

1 Bloc de code
DATA STEP Data
Explication :
Création de la table Grades1. ATTENTION : La variable 'result' est initialisée à '' (chaîne vide), ce qui fixe sa longueur à 1 caractère. Les valeurs 'Failed' et 'Passed' seront tronquées en 'F' et 'P'.
Copié !
1DATA Grades1;
2 INPUT subj 1-4 name $ 5-23 sex exam1 exam2 exam3 exam4 exam5 project finalexam;
3 actualavg = mean(exam1,exam2,exam3,exam4,exam5,project,finalexam);
4 avgscore = (exam1+exam2+exam3+exam4+exam5+project+finalexam)/7;
5
6 IF avgscore=. THEN RESULT=''; * missing value;
7 ELSE IF avgscore < 80 THEN RESULT='Failed';
8 ELSE RESULT='Passed';
9 DATALINES;
101011 Alia Bhatt 2 100 65 83 84 99 91 96
111012 Maria Smith 1 78 82 86 . 100 95 97
121111 Thomas Jones 2 88 81 96 69 91 90 98
131121 Benedictine Arnold 2 68 82 82 89 89 93 99
141301 Trisha Gupta 1 51 69 79 59 85 64 100
15;
16RUN;
2 Bloc de code
PROC PRINT
Explication :
Affichage de Grades1 pour observer la troncature de la variable 'result'.
Copié !
1 
2PROC PRINT
3DATA=Grades1;
4var name avgscore actualavg RESULT;
5RUN;
6 
3 Bloc de code
DATA STEP Data
Explication :
Création de Grades2. Ici, 'result' est initialisée avec une chaîne de 9 espaces. Cela force implicitement la longueur à 9, évitant la troncature, mais consomme de l'espace inutilement si la chaîne est vide.
Copié !
1DATA Grades2;
2 INPUT subj 1-4 name $ 5-23 sex exam1 exam2 exam3 exam4 exam5 project finalexam;
3 actualavg = mean(exam1,exam2,exam3,exam4,exam5,project,finalexam);
4 avgscore = (exam1+exam2+exam3+exam4+exam5+project+finalexam)/7;
5
6 IF avgscore=. THEN RESULT=' '; * missing value;
7 ELSE IF avgscore < 80 THEN RESULT='Failed';
8 ELSE RESULT='Passed';
9 DATALINES;
101011 Alia Bhatt 2 100 65 83 84 99 91 96
111012 Maria Smith 1 78 82 86 . 100 95 97
121111 Thomas Jones 2 88 81 96 69 91 90 98
131121 Benedictine Arnold 2 68 82 82 89 89 93 99
141301 Trisha Gupta 1 51 69 79 59 85 64 100
15;
16RUN;
4 Bloc de code
PROC PRINT
Explication :
Affichage de Grades2. Les valeurs 'Failed' et 'Passed' apparaissent correctement.
Copié !
1 
2PROC PRINT
3DATA=Grades2;
4var name avgscore actualavg RESULT;
5RUN;
6 
5 Bloc de code
DATA STEP Data
Explication :
Création de Grades3. Utilisation de l'instruction 'LENGTH result $8.;' avant l'utilisation de la variable. C'est la méthode recommandée pour contrôler précisément le type et la longueur des variables.
Copié !
1DATA Grades3;
2 LENGTH RESULT $8.;
3 INPUT subj 1-4 name $ 5-23 sex exam1 exam2 exam3 exam4 exam5 project finalexam;
4 actualavg = mean(exam1,exam2,exam3,exam4,exam5,project,finalexam);
5 avgscore = (exam1+exam2+exam3+exam4+exam5+project+finalexam)/7;
6
7 IF avgscore=. THEN RESULT=''; * missing value;
8 ELSE IF avgscore < 80 THEN RESULT='Failed';
9 ELSE RESULT='Passed';
10 DATALINES;
111011 Alia Bhatt 2 100 65 83 84 99 91 96
121012 Maria Smith 1 78 82 86 . 100 95 97
131111 Thomas Jones 2 88 81 96 69 91 90 98
141121 Benedictine Arnold 2 68 82 82 89 89 93 99
151301 Trisha Gupta 1 51 69 79 59 85 64 100
16;
17RUN;
6 Bloc de code
PROC PRINT
Explication :
Affichage final de Grades3 confirmant la bonne gestion de la variable.
Copié !
1 
2PROC PRINT
3DATA=Grades3;
4var name avgscore actualavg RESULT;
5RUN;
6 
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.