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

从SAS中的变量名中删除后缀,sas,Sas,我有一个数据集,我试图简单地重命名其中的许多变量。变量名的结构如下: '2018 10 20 ABC'n '2018 10 27 ABC'n '2018 11 03 ABC'n 等等。这是一个新变量,每周一次,我只想从所有变量名中删除ABC。但有很多,我希望解决方案是一般性的,所以我不必键入 rename '2018 10 20 ABC'n='2018 10 20'n 对于每个实例。没有根据复杂的名称转换直接重命名变量的语法。您必须生成源代码(codegen)来执行您识别的重命名语句 例如:

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

'2018 10 20 ABC'n
'2018 10 27 ABC'n
'2018 11 03 ABC'n
等等。这是一个新变量,每周一次,我只想从所有变量名中删除ABC。但有很多,我希望解决方案是一般性的,所以我不必键入

rename '2018 10 20 ABC'n='2018 10 20'n

对于每个实例。

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

例如:

使用
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.


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

例如:

使用
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.