Datos 'Newtubes' creados a través de DATALINES con bucles anidados para generar los identificadores de lote (Batch).
1 Bloque de código
DATA STEP Data
Explicación : Creación del conjunto de datos con lectura continua ( { "lang": "es", "titre": "Lectura de datos multicolumna y multilinea", "categorie": "ETL", "tags": [ "DATA STEP", "INPUT", "INFILE", "DATALINES", "TRAILING AT", "DOUBLE TRAILING AT" ], "admin": 0, "cas": 0, "external_data_not_found": 1, "description": "Script SAS que ilustra diferentes técnicas de lectura de datos brutos (archivos planos o datalines) cuando los registros se extienden en múltiples columnas o líneas, utilizando los punteros de control de línea (@ y @@).", "description_detaillee": "El script presenta tres escenarios: 1) Lectura de un archivo externo donde varias observaciones se suceden en la misma línea, requiriendo el operador '@@'. 2) Lectura simple con mantenimiento de línea '@' que demuestra la pérdida de datos si el puntero se libera implícitamente al final del paso DATA. 3) Lectura secuencial múltiple en la misma línea con '@' para extraer todos los datos.", "analyse_donnees": { "type_source": "MIXTE", "details": "El primer bloque lee un archivo externo 'C:\datasets\quiz2.txt' (ruta de Windows a adaptar para Viya/Linux). Los bloques siguientes utilizan datos internos (DATALINES)." }, "infos_copyright": { "copyright_detecte": false, "copyright_info": null }, "blocs_code": [ { "est_creation_donnees": true, "procedure_principale": "DATA STEP", "code_sas": "DATA data_multi_col;\n\tinfile \"C:\\datasets\\quiz2.txt\" firstobs=3;\n\n\t* input name $ 1-10 (q1-q5) (1.) mid final @@;\n\t\n\t/* Utilisation de @@ pour maintenir le pointeur sur la ligne */\n\tinput name $CHAR10. (q1-q5) (1.) mid final @@;\n\tif mid=. then mid=0;\n\tif final=. then final=0;\n\tquiz_score=mean(q1,q2,q3,q4,q5);\n\ttotal_score=quiz_score*8 + mid*0.3 + final*0.3;\n\n\tif total_score>=90 then grade='A';\n\telse if total_score>=80 then grade='B';\n\telse if total_score>=70 then grade='C';\n\telse if total_score>=60 then grade='D';\n\telse grade='F';\n\tkeep name total_score grade;\nRUN;", "explication_code_sas": "Este bloque lee un archivo de texto externo. El uso de '@@' al final de la instrucción INPUT permite leer varias observaciones concatenadas sucesivamente en la misma línea física en el archivo fuente. Luego se realizan cálculos de puntuaciones y asignación de calificaciones." }, { "est_creation_donnees": false, "procedure_principale": "PROC PRINT", "code_sas": "PROC PRINT DATA=data_multi_col;\nRUN;\nQUIT;", "explication_code_sas": "Muestra el conjunto de datos resultante 'data_multi_col'." }, { "est_creation_donnees": true, "procedure_principale": "DATA STEP", "code_sas": "DATA TEST_1;\n\tinput x y @;\n\toutput;\n\tdatalines;\n11 12 13 19 32 32 34 43 12 09\n45 24 33 34 75 74 45 86 32 54\n;\nRUN;", "explication_code_sas": "Demostración de una lectura 'incompleta'. El puntero '@' mantiene la línea para la iteración actual, pero el puntero se libera al final implícito del paso DATA. Resultado: solo se lee el primer par (x,y) de cada línea (11 12, luego 45 24), el resto de la línea se ignora." }, { "est_creation_donnees": false, "procedure_principale": "PROC PRINT", "code_sas": "PROC PRINT DATA=TEST_1;\nRUN;\nQUIT;", "explication_code_sas": "Muestra el resultado de la lectura parcial." }, { "est_creation_donnees": true, "procedure_principale": "DATA STEP", "code_sas": "DATA TEST_2;\n\tinput x y @;\n\toutput;\n\tinput x y @;\n\toutput;\n\tinput x y @;\n\toutput;\n\tinput x y @;\n\toutput;\n\tinput x y @;\n\toutput;\n\tdatalines;\n11 12 13 19 32 32 34 43 12 09\n45 24 33 34 75 74 45 86 32 54\n;\nRUN;", "explication_code_sas": "Lectura exhaustiva de una línea densa. Al repetir la instrucción INPUT con '@' dentro del mismo paso DATA, se fuerza a SAS a leer sucesivamente los pares de valores en la misma línea física antes de pasar a la siguiente línea." }, { "est_creation_donnees": false, "procedure_principale": "PROC PRINT", "code_sas": "PROC PRINT DATA=TEST_2;\nRUN;\nQUIT;", "explication_code_sas": "Muestra los datos completos leídos por TEST_2." } ] } ) de los valores de diámetro. Los bucles DO anidados generan la variable de grupo 'Batch' (15 lotes) con 5 observaciones por lote.
Explicación : Generación de un diagrama de caja estándar con ODS Graphics activado. Muestra la distribución del diámetro para cada lote.
¡Copiado!
ods graphics on;
title 'Box Plot for New Copper Tubes' ;
proc boxplot data=Newtubes;
plot Diameter*Batch / odstitle = title;
run;
1
ods graphics on;
2
title 'Box Plot for New Copper Tubes' ;
3
PROC BOXPLOTDATA=Newtubes;
4
plot Diameter*Batch / odstitle = title;
5
RUN;
3 Bloque de código
PROC BOXPLOT
Explicación : Generación del diagrama con la opción 'clipfactor=1.5'. Esta opción trunca los diagramas de caja cuyas bigotes se extenderían demasiado (valores extremos), permitiendo hacer zoom en la distribución central.
¡Copiado!
title 'Box Plot for New Copper Tubes' ;
proc boxplot data=Newtubes;
plot Diameter*Batch /
odstitle = title
clipfactor = 1.5;
run;
1
title 'Box Plot for New Copper Tubes' ;
2
PROC BOXPLOTDATA=Newtubes;
3
plot Diameter*Batch /
4
odstitle = title
5
clipfactor = 1.5;
6
RUN;
4 Bloque de código
PROC BOXPLOT
Explicación : Versión enriquecida del gráfico truncado. La opción 'cliplegend' añade una leyenda explicativa y 'clipsubchar' define el carácter '#' para marcar los lotes que han sufrido una truncación.
¡Copiado!
title 'Box Plot for New Copper Tubes' ;
proc boxplot data=Newtubes;
plot Diameter*Batch /
odstitle = title
clipfactor = 1.5
cliplegend = '# Clipped Boxes'
clipsubchar = '#';
run;
1
title 'Box Plot for New Copper Tubes' ;
2
PROC BOXPLOTDATA=Newtubes;
3
plot Diameter*Batch /
4
odstitle = title
5
clipfactor = 1.5
6
cliplegend = '# Clipped Boxes'
7
clipsubchar = '#';
8
RUN;
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.