删除 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 是变量名,我希望能够看到 ACG 相同,然后删除除一个之外的所有变量。 BD 也是相同的。我只想保留一个。

这可能吗?

这里是使用 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;