Publicado el :
ETL CREATION_INTERNE

Cálculo de calificaciones y promedios para estudiantes

Este código también está disponible en: Deutsch English Français
En espera de validación
El script consta de tres pares de bloques DATA STEP / PROC PRINT. El primer bloque (Grades1) calcula un promedio de dos maneras para resaltar la gestión de valores perdidos, y luego asigna una calificación. El segundo bloque (Grades2) muestra una sintaxis alternativa para comparaciones de rangos. El tercer bloque (Grades3) demuestra el uso de los operadores lógicos AND (&) y OR (|) para modificar un cálculo. Cada tabla creada se muestra a continuación con PROC PRINT.
Análisis de datos

Type : CREATION_INTERNE


Los datos de los estudiantes se integran directamente en cada paso DATA a través de la instrucción 'DATALINES', lo que hace que el script sea autónomo.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque crea la tabla 'Grades1'. Lee los datos de los estudiantes. 'actualavg' se calcula con la función MEAN, que ignora los valores perdidos. 'avgscore' se calcula manualmente, lo que propaga los valores perdidos (el resultado será perdido si una calificación lo está). Una serie de condiciones IF/ELSE IF asigna una calificación textual en la variable 'result' en función de 'avgscore'.
¡Copiado!
1DATA Grades1;
2 LENGTH RESULT $12.;
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='Invalid'; * missing value;
8 ELSE IF avgscore >= 90 THEN RESULT='A+';
9 ELSE IF avgscore >= 88 AND avgscore < 90 THEN RESULT='A';
10 ELSE IF avgscore >= 86 AND avgscore < 88 THEN RESULT='B';
11 ELSE IF avgscore >= 84 AND avgscore < 86 THEN RESULT='C';
12 ELSE IF avgscore < 84 THEN RESULT='F';
13
14 DATALINES;
151011 Alia Bhatt 2 100 65 83 84 99 91 96
161012 Maria Smith 1 78 82 86 . 100 95 97
171111 Thomas Jones 2 88 81 96 69 91 90 98
181121 Benedictine Arnold 2 68 82 82 89 89 93 99
191301 Trisha Gupta 1 51 69 79 59 85 64 100
20;
21RUN;
2 Bloque de código
PROC PRINT
Explicación :
Este procedimiento muestra las columnas 'name', 'actualavg', 'avgscore' y 'result' de la tabla 'Grades1' para visualizar los resultados del primer DATA STEP.
¡Copiado!
1 
2PROC PRINT
3DATA=Grades1;
4var name actualavg avgscore RESULT;
5RUN;
6 
3 Bloque de código
DATA STEP Data
Explicación :
Este bloque crea la tabla 'Grades2'. Es similar al primero pero utiliza una sintaxis alternativa para las condiciones de rango (ej: '90<=x<=100') para asignar la calificación. Utiliza una variable intermedia 'x' para el cálculo del promedio.
¡Copiado!
1DATA Grades2;
2 LENGTH RESULT $12.;
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 x = (exam1+exam2+exam3+exam4+exam5+project+finalexam)/7;
6
7 IF x=. THEN RESULT='Invalid'; * missing value;
8 ELSE IF 90<=x<=100 THEN RESULT='A+';
9 ELSE IF 88<=x<90 THEN RESULT='A';
10 ELSE IF 86<=x<88 THEN RESULT='B';
11 ELSE IF 84<=x<86 THEN RESULT='C';
12 ELSE IF 0<=x<84 THEN RESULT='F';
13
14 avgscore = x;
15
16 DATALINES;
171011 Alia Bhatt 2 100 65 83 84 99 91 96
181012 Maria Smith 1 78 82 86 . 100 95 97
191111 Thomas Jones 2 88 81 96 69 91 90 98
201121 Benedictine Arnold 2 68 82 82 89 89 93 99
211301 Trisha Gupta 1 51 69 79 59 85 64 100
22;
23RUN;
4 Bloque de código
PROC PRINT
Explicación :
Este procedimiento muestra las columnas 'name', 'actualavg', 'avgscore' y 'result' de la tabla 'Grades2'.
¡Copiado!
1 
2PROC PRINT
3DATA=Grades2;
4var name actualavg avgscore RESULT;
5RUN;
6 
5 Bloque de código
DATA STEP Data
Explicación :
Este bloque crea la tabla 'Grades3'. Calcula un promedio 'x' redondeado a un decimal. Luego, utiliza una condición compleja con los operadores lógicos 'Y' (& o and) y 'O' (|) para crear una nueva variable 'y'. 'y' se incrementa en 1 si las calificaciones de los tres primeros exámenes son crecientes O si las calificaciones de los exámenes 3 a 5 son crecientes.
¡Copiado!
1DATA Grades3;
2 INPUT subj 1-4 name $ 5-23 sex exam1 exam2 exam3 exam4 exam5 project finalexam;
3 x = round(((exam1+exam2+exam3+exam4+exam5+project+finalexam)/7),1);
4
5 IF (exam1
6 THEN y=x+1;
7 ELSE y=x;
8 
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;
6 Bloque de código
PROC PRINT
Explicación :
Este procedimiento muestra las calificaciones, el promedio calculado 'x' y el valor condicional 'y' de la tabla 'Grades3' para ilustrar el efecto de los operadores lógicos.
¡Copiado!
1 
2PROC PRINT
3DATA=Grades3;
4var name exam1 exam2 exam3 exam4 exam5 x y;
5RUN;
6 
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.