Eliminar columnas idénticas en SAS
duplicate-removal (1)
Estoy trabajando con un conjunto de datos muy grande que contiene las mismas columnas varias veces, pero con diferentes nombres de columna (tanto caracteres como numéricos). ¿Alguien sabe cómo encontrar y eliminar estas columnas idénticas?
Ejemplo
A B C D E F G
12 ab 12 ab 8 h 12
14 cd 14 cd 65 j 14
6 fs 6 fs 3 g 6
. . . . 4 q .
3 d 3 d 5 d 3
AG
son nombres variables, y quiero poder ver que A
, C
y G
son idénticos y luego eliminar todos excepto uno. También B
y D
son idénticos. Quiero tener solo uno.
¿Esto es posible?
Aquí hay un ejemplo utilizando la técnica propuesta por Shenglin Chen en los comentarios.
data have ;
input A B $ C D $ E F $ G ;
cards;
12 ab 12 ab 8 h 12
14 cd 14 cd 65 j 14
6 fs 6 fs 3 g 6
. . . . 4 q .
3 d 3 d 5 d 3
;;;;
Encuentra las columnas numéricas únicas.
proc transpose data=have out=tall_numbers ;
var _numeric_;
run;
proc sort data=tall_numbers nodupkey out=keep_numbers(keep=_name_);
by col: ;
run;
Encuentra las columnas de personajes únicos.
proc transpose data=have out=tall_characters ;
var _character_;
run;
proc sort data=tall_characters nodupkey out=keep_characters(keep=_name_);
by col: ;
run;
Obtenga la lista combinada de columnas.
proc sql noprint ;
select _name_
into :keep_list separated by '' ''
from (select _name_ from keep_characters
union select _name_ from keep_numbers)
order by 1
;
quit;
Crea una nueva tabla con solo las columnas únicas.
data want ;
set have ;
keep &keep_list ;
run;