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.
PROC SORTDATA=inventory; BY PartNumber; RUN; /* 2*/
6
PROC SORTDATA=Sales; BY PartNumber; RUN;
7
PROC SORTDATA=Sales2019; BY PartNumber; RUN;
8
9
PROC PRINTDATA=inventory; RUN/* 3*/;
10
PROC PRINTDATA=Sales; RUN;
11
PROC PRINTDATA=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!
proc sql;
title "Variables Common to Inventory, Sales, and Sales2019";
create table commonvars as /* 1 */
select memname, upcase(name) as name
from dictionary.columns
where libname='WORK' and
memname in ('INVENTORY', 'SALES', 'SALES2019');
select name /* 2 */
from commonvars
group by name
having count(*)=(select count(distinct(memname)) from commonvars);
quit;
1
PROC 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);
12
QUIT;
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!
proc sort data=sales; /* 1 */
by partNumber;
run;
proc print data=sales; run;
proc freq data = Sales noprint; /* 2 */
tables partNumber / out = SalesDupes
(keep = partNumber Count
where = (Count > 1));
run;
proc print data=SalesDupes;run;
data SalesUnique; /* 3 */
set Sales;
uniqueID = catx('.',partNumber,_n_);
run;
proc print data=SalesUnique; /* 4 */
var uniqueID partNumber partName salesPerson;
run;
1
PROC SORTDATA=sales; /* 1 */
2
BY partNumber;
3
RUN;
4
PROC PRINTDATA=sales; RUN;
5
6
PROC FREQDATA = Sales noprint; /* 2 */
7
tables partNumber / out = SalesDupes
8
(keep = partNumber Count
9
where = (Count > 1));
10
RUN;
11
12
PROC PRINTDATA=SalesDupes;RUN;
13
14
DATA SalesUnique; /* 3 */
15
SET Sales;
16
uniqueID = catx('.',partNumber,_n_);
17
RUN;
18
19
PROC PRINTDATA=SalesUnique; /* 4 */
20
var uniqueID partNumber partName salesPerson;
21
RUN;
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!
data cars; /* 1 */
set sashelp.cars;
run;
proc contents data=cars; run; /* 2 */
proc contents data=CarsSmall; run;
data combineCars;
merge cars CarsSmallNum; /* 3*/
by make model;
keep Make DriveTrain Model MakeModelDrive Weight;
run;
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!
data CarsSmallNum; /* 1 */
set CarsSmall;
weightNum=input(weight, 8.);
drop weight;
rename WeightNum=weight;
run;
proc sort data=cars; by make model; run; /* 2 */
proc sort data=CarsSmallNum; by Make Model; run;
data combineCars;
merge cars CarsSmallNum; /* 3 */
by make model;
keep Make DriveTrain Model MakeModelDrive Weight;
run;
proc contents data=combineCars; run; /* 4*/
proc print data=combineCars; run;
1
DATA CarsSmallNum; /* 1 */
2
SET CarsSmall;
3
weightNum=INPUT(weight, 8.);
4
drop weight;
5
rename WeightNum=weight;
6
RUN;
7
8
PROC SORTDATA=cars; BY make model; RUN; /* 2 */
9
PROC SORTDATA=CarsSmallNum; BY Make Model; RUN;
10
11
DATA combineCars;
12
MERGE cars CarsSmallNum; /* 3 */
13
BY make model;
14
keep Make DriveTrain Model MakeModelDrive Weight;
15
RUN;
16
PROC CONTENTSDATA=combineCars; RUN; /* 4*/
17
PROC PRINTDATA=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.
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!
data yearly;
merge quarter1 quarter2 quarter3 quarter4;
by Account;
attrib Mileage
length = 6;
run;
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.
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!
data vehicles(rename=(weight=weightLBS));
set vehicles;
run;
1
2
DATA vehicles(rename=(weight=weightLBS));
3
SET vehicles;
4
RUN;
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.
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.