Publicado el :
Manipulación de datos CREATION_INTERNE

Ejemplos: Preparar datos

Este código también está disponible en: Deutsch English
Análisis funcional detallado de los diferentes métodos de preparación de datos. Incluye técnicas para examinar los datos (PROC CONTENTS, PROC PRINT), encontrar variables comunes (PROC SQL), crear valores BY únicos en caso de duplicados (PROC FREQ, función CATX), gestionar las diferencias de tipos de datos (función INPUT), ajustar las longitudes de las variables (instrucción LENGTH o ATTRIB) y estandarizar los formatos y etiquetas (instrucción ATTRIB). Los ejemplos buscan asegurar la compatibilidad de los atributos de las variables comunes para operaciones de combinación de datos exitosas.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (datalines) o SASHELP, así como conjuntos de datos predefinidos en la documentación de SAS.

1 Bloque de código
PROC CONTENTS / PROC SORT / PROC PRINT
Explicación :
Este ejemplo utiliza los procedimientos PROC CONTENTS, PROC SORT y PROC PRINT para examinar la información descriptiva, ordenar e imprimir los conjuntos de datos 'Inventory', 'Sales' y 'Sales2019' antes de combinarlos. El objetivo es verificar la compatibilidad de las variables comunes e identificar las relaciones entre los conjuntos de datos.
¡Copiado!
1PROC CONTENTS DATA=Inventory; RUN; /* 1*/
2PROC CONTENTS DATA=Sales; RUN;
3PROC CONTENTS DATA=Sales2019; RUN;
4QUIT;
5PROC SORT DATA=inventory; BY PartNumber; RUN; /* 2*/
6PROC SORT DATA=Sales; BY PartNumber; RUN;
7PROC SORT DATA=Sales2019; BY PartNumber; RUN;
8 
9PROC PRINT DATA=inventory; RUN /* 3*/;
10PROC PRINT DATA=Sales; RUN;
11PROC PRINT DATA=Sales2019; RUN;
2 Bloque de código
PROC SQL
Explicación :
Este ejemplo utiliza PROC SQL para encontrar las variables comunes a los conjuntos de datos 'Inventory', 'Sales' y 'Sales2019'. Crea una tabla temporal 'commonvars' a partir de 'dictionary.columns' y luego selecciona los nombres de las variables que aparecen en todos los conjuntos de datos especificados.
¡Copiado!
1PROC SQL;
2 title "Variables Common to Inventory, Sales, and Sales2019";
3 create TABLE commonvars as /* 1 */
4 select memname, upcase(name) as name
5 from dictionary.columns
6 where LIBNAME='WORK' and
7 memname in ('INVENTORY', 'SALES', 'SALES2019');
8 select name /* 2 */
9 from commonvars
10 group BY name
11 having count(*)=(select count(distinct(memname)) from commonvars);
12QUIT;
3 Bloque de código
PROC SORT / PROC FREQ / DATA STEP
Explicación :
Este ejemplo muestra cómo manejar valores duplicados en una variable BY. Utiliza PROC FREQ para identificar duplicados de 'partNumber' en el conjunto de datos 'Sales', y luego un paso DATA con la función CATX y la variable automática _N_ para crear un identificador único ('uniqueID') para cada observación, incluidos los duplicados.
¡Copiado!
1PROC SORT DATA=sales; /* 1 */
2 BY partNumber;
3RUN;
4PROC PRINT DATA=sales; RUN;
5 
6PROC FREQ DATA = Sales noprint; /* 2 */
7 tables partNumber / out = SalesDupes
8 (keep = partNumber Count
9 where = (Count > 1));
10RUN;
11 
12PROC PRINT DATA=SalesDupes;RUN;
13 
14DATA SalesUnique; /* 3 */
15 SET Sales;
16 uniqueID = catx('.',partNumber,_n_);
17RUN;
18 
19PROC PRINT DATA=SalesUnique; /* 4 */
20 var uniqueID partNumber partName salesPerson;
21RUN;
4 Bloque de código
DATA STEP / PROC CONTENTS
Explicación :
Este ejemplo ilustra un problema de tipos de datos incompatibles al fusionar conjuntos de datos. Inicialmente, un intento de fusión falla porque la variable 'Weight' es de tipo CHAR en 'CarsSmall' y NUMERIC en 'Cars'. Para resolver este problema, el ejemplo muestra cómo convertir la variable 'Weight' de 'CarsSmall' a numérica usando la función INPUT y renombrarla, antes de proceder con la fusión.
¡Copiado!
1DATA cars; /* 1 */
2 SET sashelp.cars;
3RUN;
4 
5PROC CONTENTS DATA=cars; RUN; /* 2 */
6PROC CONTENTS DATA=CarsSmall; RUN;
7 
8DATA combineCars;
9 MERGE cars CarsSmallNum; /* 3*/
10 BY make model;
11 keep Make DriveTrain Model MakeModelDrive Weight;
12RUN;
5 Bloque de código
DATA STEP / PROC SORT / PROC CONTENTS / PROC PRINT
Explicación :
Corrección del ejemplo anterior: Este código resuelve el problema de incompatibilidad de tipos de datos creando un nuevo conjunto de datos 'CarsSmallNum' donde la variable 'Weight' se convierte a numérica usando la función INPUT. La variable original se elimina y la nueva se renombra. Luego, los conjuntos de datos se ordenan y fusionan con éxito. PROC CONTENTS y PROC PRINT se utilizan para verificar el resultado.
¡Copiado!
1DATA CarsSmallNum; /* 1 */
2 SET CarsSmall;
3 weightNum=INPUT(weight, 8.);
4 drop weight;
5 rename WeightNum=weight;
6RUN;
7 
8PROC SORT DATA=cars; BY make model; RUN; /* 2 */
9PROC SORT DATA=CarsSmallNum; BY Make Model; RUN;
10 
11DATA combineCars;
12 MERGE cars CarsSmallNum; /* 3 */
13 BY make model;
14 keep Make DriveTrain Model MakeModelDrive Weight;
15RUN;
16PROC CONTENTS DATA=combineCars; RUN; /* 4*/
17PROC PRINT DATA=combineCars; RUN;
6 Bloque de código
PROC PRINT / DATA STEP / PROC CONTENTS
Explicación :
Este ejemplo demuestra cómo manejar diferentes longitudes para una variable común ('Mileage') al fusionar conjuntos de datos. Muestra que SAS usa por defecto la longitud de la primera tabla listada en la instrucción MERGE. Para controlar explícitamente la longitud, la instrucción LENGTH debe usarse antes de la instrucción MERGE en el paso DATA.
¡Copiado!
1PROC PRINT DATA=quarter1; RUN; /* 1 */
2PROC PRINT DATA=quarter2; RUN;
3PROC PRINT DATA=quarter3; RUN;
4PROC PRINT DATA=quarter4; RUN;
5 
6DATA yearly;
7 MERGE quarter1 quarter2 quarter3 quarter4; /* 2 */
8 BY Account;
9RUN;
10 
11DATA yearly; /* 3 */
12 LENGTH Mileage 6;
13 MERGE quarter1 quarter2 quarter3 quarter4;
14 BY Account;
15RUN;
16PROC CONTENTS DATA=yearly; RUN; /* 4 */
7 Bloque de código
DATA STEP
Explicación :
Corrección del ejemplo anterior: Esta versión muestra cómo usar la instrucción ATTRIB para especificar explícitamente la longitud de la variable 'Mileage' a 6 bytes antes de la fusión de los conjuntos de datos, garantizando así que la longitud deseada se aplique en el conjunto de datos de salida.
¡Copiado!
1DATA yearly;
2 MERGE quarter1 quarter2 quarter3 quarter4;
3 BY Account;
4 attrib Mileage
5 LENGTH = 6;
6RUN;
8 Bloque de código
PROC CONTENTS / PROC SORT / DATA STEP / PROC PRINT
Explicación :
Este ejemplo maneja las diferencias de formatos y etiquetas para las variables comunes ('Height' y 'Weight') al fusionar los conjuntos de datos 'class' y 'classfit'. Muestra cómo la instrucción ATTRIB puede usarse en un paso DATA para definir explícitamente la etiqueta y el formato de las variables en el conjunto de datos de salida, anulando así el comportamiento predeterminado de SAS que toma los atributos del primer conjunto de datos listado.
¡Copiado!
1PROC CONTENTS DATA=class; RUN; /* 1 */
2PROC CONTENTS DATA=classfit; RUN;
3 
4PROC SORT DATA=class; BY name; RUN; /* 2 */
5PROC SORT DATA=classfit; BY name; RUN;
6 
7DATA merged;
8 MERGE class classfit; BY Name;
9 attrib Weight
10 label = "Weight";
11 attrib Height Weight Predict FORMAT=comma8.2; /* 3 */
12RUN;
13PROC PRINT DATA=merged; /* 4 */
14RUN;
15PROC CONTENTS DATA=merged; RUN;
9 Bloque de código
DATA STEP
Explicación :
Este ejemplo aborda el caso en que las variables tienen el mismo nombre pero representan datos diferentes (y, por lo tanto, no son realmente variables comunes). La solución consiste en utilizar la opción RENAME= del conjunto de datos en la instrucción DATA para renombrar la variable 'Weight' a 'weightLBS' en el conjunto de datos 'vehicles' (proveniente de CarsSmall), evitando así un conflicto o una fusión incorrecta al combinar datos.
¡Copiado!
1 
2DATA vehicles(rename=(weight=weightLBS));
3SET vehicles;
4RUN;
5 
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.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved