删除 SAS 中的相同列
Delete identical columns in SAS
我正在处理一个非常大的数据集,该数据集多次包含相同的列,但列名不同(字符和数字)。
有谁知道如何查找和删除这些相同的列?
例子
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
A-G
是变量名,我希望能够看到 A
、C
和 G
相同,然后删除除一个之外的所有变量。
B
和 D
也是相同的。我只想保留一个。
这可能吗?
这里是使用 Shenglin Chen 在评论中提出的技术的例子。
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
;;;;
找到唯一的数字列。
proc transpose data=have out=tall_numbers ;
var _numeric_;
run;
proc sort data=tall_numbers nodupkey out=keep_numbers(keep=_name_);
by col: ;
run;
查找唯一字符列。
proc transpose data=have out=tall_characters ;
var _character_;
run;
proc sort data=tall_characters nodupkey out=keep_characters(keep=_name_);
by col: ;
run;
获取列的组合列表。
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;
仅使用唯一列创建新的 table。
data want ;
set have ;
keep &keep_list ;
run;
我正在处理一个非常大的数据集,该数据集多次包含相同的列,但列名不同(字符和数字)。 有谁知道如何查找和删除这些相同的列?
例子
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
A-G
是变量名,我希望能够看到 A
、C
和 G
相同,然后删除除一个之外的所有变量。
B
和 D
也是相同的。我只想保留一个。
这可能吗?
这里是使用 Shenglin Chen 在评论中提出的技术的例子。
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
;;;;
找到唯一的数字列。
proc transpose data=have out=tall_numbers ;
var _numeric_;
run;
proc sort data=tall_numbers nodupkey out=keep_numbers(keep=_name_);
by col: ;
run;
查找唯一字符列。
proc transpose data=have out=tall_characters ;
var _character_;
run;
proc sort data=tall_characters nodupkey out=keep_characters(keep=_name_);
by col: ;
run;
获取列的组合列表。
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;
仅使用唯一列创建新的 table。
data want ;
set have ;
keep &keep_list ;
run;