从SAS中的变量名称中删除后缀

时间:2020-11-11 11:11:27

标签: sas

我有一个数据集,我正试图简单地重命名许多变量。变量名的结构如下:

var collections = db.getCollectionNames();
var count = 0;

for (var i = 0; i < collections.length; i++) {
  db.getCollection(collections[i]).find().limit(5).pretty();
}

,依此类推。因此,这是每周一次的新变量,我只想从所有变量名称中删除ABC。但是有很多,我希望解决方案比较通用,所以我不必键入

'2018 10 20 ABC'n
'2018 10 27 ABC'n
'2018 11 03 ABC'n

对于每个实例。

1 个答案:

答案 0 :(得分:0)

没有根据复杂名称转换直接重命名变量的语法。您将必须生成源代码(代码生成)以执行所标识的rename语句。

示例:

使用Proc CONTENTS获取变量的名称作为数据,并使用Proc SQL计算rename语句所需的 oldname = newname 对。使用Proc DATASETS修改数据集元数据。

options validvarname=any;

data have;
  attrib
    x y z p q r
    '2018 10 20 ABC'n
    '2018 10 27 ABC'n
    '2018 11 03 ABC'n
    length = 8
  ;
run;

proc contents noprint data=have out=have_metadata(keep=name);
run;

proc sql noprint;
  select quote(name,"'") || 'n = ' || quote(tranwrd(name,'ABC',''),"'") || 'n'
  into :renames separated by ' '
  from have_metadata
  where upcase(name) like '%ABC'
  ;

proc datasets nolist lib=work;
  modify have;
  rename &renames;
run;
quit;

应该登录

197  proc datasets nolist lib=work;
198    modify have;
199    rename &renames;
NOTE: Renaming variable '2018 10 20 ABC'n to '2018 10 20'n.
NOTE: Renaming variable '2018 10 27 ABC'n to '2018 10 27'n.
NOTE: Renaming variable '2018 11 03 ABC'n to '2018 11 03'n.
200  run;

NOTE: MODIFY was successful for WORK.HAVE.DATA.