Veröffentlicht am :
ETL CREATION_INTERNE

Vergleich von Methoden zur Variablendefinitionslänge

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Dieses Skript stellt drei Ansätze zur Erstellung einer bedingten Variable 'result' in einem Data Step vor. Es veranschaulicht, wie SAS© die Länge einer Zeichenvariable bestimmt: implizit durch die erste Zuweisung (was zu einer potenziellen Trunkierung führt), implizit durch eine Zeichenkette aus Leerzeichen oder explizit durch die LENGTH-Anweisung (bewährte Praxis). Es berechnet auch Mittelwerte mittels der MEAN-Funktion und einer arithmetischen Formel, um den unterschiedlichen Umgang mit fehlenden Werten aufzuzeigen.
Datenanalyse

Type : CREATION_INTERNE


Die Daten werden direkt im Code über die DATALINES-Anweisung generiert.

1 Codeblock
DATA STEP Data
Erklärung :
Erstellung der Tabelle Grades1. ACHTUNG: Die Variable 'result' wird mit '' (leere Zeichenkette) initialisiert, wodurch ihre Länge auf 1 Zeichen festgelegt wird. Die Werte 'Failed' und 'Passed' werden zu 'F' und 'P' trunkisiert.
Kopiert!
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 Codeblock
PROC PRINT
Erklärung :
Anzeige von Grades1, um die Trunkierung der Variable 'result' zu beobachten.
Kopiert!
1 
2PROC PRINT
3DATA=Grades1;
4var name avgscore actualavg RESULT;
5RUN;
6 
3 Codeblock
DATA STEP Data
Erklärung :
Erstellung von Grades2. Hier wird 'result' mit einer Zeichenkette von 9 Leerzeichen initialisiert. Dies erzwingt implizit eine Länge von 9, wodurch eine Trunkierung vermieden wird, verbraucht aber unnötig Speicherplatz, wenn die Zeichenkette leer ist.
Kopiert!
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 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;
4 Codeblock
PROC PRINT
Erklärung :
Anzeige von Grades2. Die Werte 'Failed' und 'Passed' werden korrekt angezeigt.
Kopiert!
1 
2PROC PRINT
3DATA=Grades2;
4var name avgscore actualavg RESULT;
5RUN;
6 
5 Codeblock
DATA STEP Data
Erklärung :
Erstellung von Grades3. Verwendung der Anweisung 'LENGTH result $8.;' vor der Verwendung der Variable. Dies ist die empfohlene Methode, um den Typ und die Länge der Variablen präzise zu steuern.
Kopiert!
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 Codeblock
PROC PRINT
Erklärung :
Endgültige Anzeige von Grades3, die die korrekte Verwaltung der Variable bestätigt.
Kopiert!
1 
2PROC PRINT
3DATA=Grades3;
4var name avgscore actualavg RESULT;
5RUN;
6 
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.