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!
DATA Grades1;
length result $12.;
input subj 1-4 name $ 5-23 sex exam1 exam2 exam3 exam4 exam5 project finalexam;
actualavg = mean(exam1,exam2,exam3,exam4,exam5,project,finalexam);
avgscore = (exam1+exam2+exam3+exam4+exam5+project+finalexam)/7;
if avgscore=. then result='Invalid'; * missing value;
else if avgscore >= 90 then result='A+';
else if avgscore >= 88 AND avgscore < 90 then result='A';
else if avgscore >= 86 AND avgscore < 88 then result='B';
else if avgscore >= 84 AND avgscore < 86 then result='C';
else if avgscore < 84 then result='F';
DATALINES;
1011 Alia Bhatt 2 100 65 83 84 99 91 96
1012 Maria Smith 1 78 82 86 . 100 95 97
1111 Thomas Jones 2 88 81 96 69 91 90 98
1121 Benedictine Arnold 2 68 82 82 89 89 93 99
1301 Trisha Gupta 1 51 69 79 59 85 64 100
;
RUN;
1
DATA Grades1;
2
LENGTHRESULT $12.;
3
INPUT subj 1-4 name $ 5-23 sex exam1 exam2 exam3 exam4 exam5 project finalexam;
IF avgscore=. THENRESULT='Invalid'; * missing value;
8
ELSEIF avgscore >= 90THENRESULT='A+';
9
ELSEIF avgscore >= 88 AND avgscore < 90THENRESULT='A';
10
ELSEIF avgscore >= 86 AND avgscore < 88THENRESULT='B';
11
ELSEIF avgscore >= 84 AND avgscore < 86THENRESULT='C';
12
ELSEIF avgscore < 84THENRESULT='F';
13
14
DATALINES;
15
1011 Alia Bhatt 2100658384999196
16
1012 Maria Smith 1788286 . 1009597
17
1111 Thomas Jones 288819669919098
18
1121 Benedictine Arnold 268828289899399
19
1301 Trisha Gupta 1516979598564100
20
;
21
RUN;
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!
PROC PRINT DATA=Grades1;
var name actualavg avgscore result;
RUN;
1
2
PROC PRINT
3
DATA=Grades1;
4
var name actualavg avgscore RESULT;
5
RUN;
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!
DATA Grades2;
length result $12.;
input subj 1-4 name $ 5-23 sex exam1 exam2 exam3 exam4 exam5 project finalexam;
actualavg = mean(exam1,exam2,exam3,exam4,exam5,project,finalexam);
x = (exam1+exam2+exam3+exam4+exam5+project+finalexam)/7;
if x=. then result='Invalid'; * missing value;
else if 90<=x<=100 then result='A+';
else if 88<=x<90 then result='A';
else if 86<=x<88 then result='B';
else if 84<=x<86 then result='C';
else if 0<=x<84 then result='F';
avgscore = x;
DATALINES;
1011 Alia Bhatt 2 100 65 83 84 99 91 96
1012 Maria Smith 1 78 82 86 . 100 95 97
1111 Thomas Jones 2 88 81 96 69 91 90 98
1121 Benedictine Arnold 2 68 82 82 89 89 93 99
1301 Trisha Gupta 1 51 69 79 59 85 64 100
;
RUN;
1
DATA Grades2;
2
LENGTHRESULT $12.;
3
INPUT subj 1-4 name $ 5-23 sex exam1 exam2 exam3 exam4 exam5 project finalexam;
x = (exam1+exam2+exam3+exam4+exam5+project+finalexam)/7;
6
7
IF x=. THENRESULT='Invalid'; * missing value;
8
ELSEIF90<=x<=100THENRESULT='A+';
9
ELSEIF88<=x<90THENRESULT='A';
10
ELSEIF86<=x<88THENRESULT='B';
11
ELSEIF84<=x<86THENRESULT='C';
12
ELSEIF 0<=x<84THENRESULT='F';
13
14
avgscore = x;
15
16
DATALINES;
17
1011 Alia Bhatt 2100658384999196
18
1012 Maria Smith 1788286 . 1009597
19
1111 Thomas Jones 288819669919098
20
1121 Benedictine Arnold 268828289899399
21
1301 Trisha Gupta 1516979598564100
22
;
23
RUN;
4 Bloque de código
PROC PRINT
Explicación : Este procedimiento muestra las columnas 'name', 'actualavg', 'avgscore' y 'result' de la tabla 'Grades2'.
¡Copiado!
PROC PRINT DATA=Grades2;
var name actualavg avgscore result;
RUN;
1
2
PROC PRINT
3
DATA=Grades2;
4
var name actualavg avgscore RESULT;
5
RUN;
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!
DATA Grades3;
input subj 1-4 name $ 5-23 sex exam1 exam2 exam3 exam4 exam5 project finalexam;
x = round(((exam1+exam2+exam3+exam4+exam5+project+finalexam)/7),1);
if (exam1<exam2 & exam2<exam3) | (exam3<exam4 and exam4<exam5)
then y=x+1;
else y=x;
DATALINES;
1011 Alia Bhatt 2 100 65 83 84 99 91 96
1012 Maria Smith 1 78 82 86 . 100 95 97
1111 Thomas Jones 2 88 81 96 69 91 90 98
1121 Benedictine Arnold 2 68 82 82 89 89 93 99
1301 Trisha Gupta 1 51 69 79 59 85 64 100
;
RUN;
1
DATA 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;
10
1011 Alia Bhatt 2100658384999196
11
1012 Maria Smith 1788286 . 1009597
12
1111 Thomas Jones 288819669919098
13
1121 Benedictine Arnold 268828289899399
14
1301 Trisha Gupta 1516979598564100
15
;
16
RUN;
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!
PROC PRINT DATA=Grades3;
var name exam1 exam2 exam3 exam4 exam5 x y;
RUN;
1
2
PROC PRINT
3
DATA=Grades3;
4
var name exam1 exam2 exam3 exam4 exam5 x y;
5
RUN;
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.