Publicado el :
ETL CREATION_INTERNE

Comparación de métodos para definir la longitud de las variables

Este código también está disponible en: Deutsch English Français
En espera de validación
Este script presenta tres enfoques para crear una variable condicional 'result' en un paso Data. Ilustra cómo SAS© determina la longitud de una variable de carácter: implícitamente a través de la primera asignación (causando un truncamiento potencial), implícitamente a través de una cadena de espacios, o explícitamente a través de la instrucción LENGTH (buena práctica). También calcula promedios a través de la función MEAN y una fórmula aritmética para mostrar la diferente gestión de los valores faltantes.
Análisis de datos

Type : CREATION_INTERNE


Los datos se generan directamente en el código a través de la instrucción DATALINES.

1 Bloque de código
DATA STEP Data
Explicación :
Creación de la tabla Grades1. ATENCIÓN: La variable 'result' se inicializa a '' (cadena vacía), lo que fija su longitud en 1 carácter. Los valores 'Failed' y 'Passed' serán truncados a 'F' y 'P'.
¡Copiado!
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 Bloque de código
PROC PRINT
Explicación :
Visualización de Grades1 para observar el truncamiento de la variable 'result'.
¡Copiado!
1 
2PROC PRINT
3DATA=Grades1;
4var name avgscore actualavg RESULT;
5RUN;
6 
3 Bloque de código
DATA STEP Data
Explicación :
Creación de Grades2. Aquí, 'result' se inicializa con una cadena de 9 espacios. Esto fuerza implícitamente la longitud a 9, evitando el truncamiento, pero consume espacio innecesariamente si la cadena está vacía.
¡Copiado!
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+enzam2+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 Bloque de código
PROC PRINT
Explicación :
Visualización de Grades2. Los valores 'Failed' y 'Passed' aparecen correctamente.
¡Copiado!
1 
2PROC PRINT
3DATA=Grades2;
4var name avgscore actualavg RESULT;
5RUN;
6 
5 Bloque de código
DATA STEP Data
Explicación :
Creación de Grades3. Uso de la instrucción 'LENGTH result $8.;' antes de usar la variable. Este es el método recomendado para controlar con precisión el tipo y la longitud de las variables.
¡Copiado!
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 IF avgscore >= 80 THEN 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 Bloque de código
PROC PRINT
Explicación :
Visualización final de Grades3 confirmando la correcta gestión de la variable.
¡Copiado!
1 
2PROC PRINT
3DATA=Grades3;
4var name avgscore actualavg RESULT;
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.