我有一个数据集,我正试图简单地重命名许多变量。变量名的结构如下:
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
对于每个实例。
答案 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.