从多个变量中删除前缀
Posted
技术标签:
【中文标题】从多个变量中删除前缀【英文标题】:Delete prefix from multiple variables 【发布时间】:2018-04-16 03:43:41 【问题描述】:我有一个数据集“Dairy1”,其中变量标记为“240、241、242 ...”,但实际名称为“_240、_241、_242 ...”。
如何从所有这些变量的名称中删除前缀“_”?我尝试在 SAS 9.4 中使用以下代码,但它不起作用。
**proc sql noprint;
select cats(name,'=',scan(name, 1, '_'))
into :suffixlist
separated by ' '
from dictionary.columns
where libname = 'WORK' and memname = 'Dairy1' and '240' = scan(name, 2, '_');
quit;
%put &suffixlist.;
data want;
set Dairy1;
rename &suffixlist.;
run;**
它显示了以下内容:
警告:未解析明显的符号引用后缀列表。 错误 22-322:语法错误,期待以下之一:un nombre, ;.
提前致谢
【问题讨论】:
我说的对吗,你可以使用 SQL SERVER 代码吗? 不知道怎么用 this '240' = scan(name, 2, '_') 似乎不对 SAS 变量名不能以数字开头。 【参考方案1】:我以相反的方式做了类似的解决方案,它为变量添加了后缀。 这样做是创建单个字符串,其中包含所有变量重命名命令。
请注意,这有点愚蠢,因为它会删除所有字符。只需在 data sjm_tmp2 中修改逻辑以满足您的需要。
%macro remove_str(Dataset, str);
proc contents noprint
data=work.&dataset out=sjm_tmp(keep=NAME);
run;
data sjm_tmp2;
set sjm_tmp;
help= tranwrd(NAME, "&str.", '');
foobar=cats(name, '=',help);
run;
proc sql noprint;
select foobar into :sjm_list separated by ' ' from sjm_tmp2;
quit;
proc datasets library = work nolist;
modify &dataset;
rename &sjm_list;
quit;
proc datasets library=work noprint;
delete sjm_tmp sjm_tmp2 ;
run;
%mend;
用代码测试:
data test;
_a=1;
_b=1;
_c=1;
_d=1;
_e=1;
_f=1;
run;
%remove_str(test, _);
【讨论】:
虽然此解决方案适用于以下划线后跟字母字符开头的变量,但它不适用于给出的示例,也没有任何解决方案,因为 SAS 变量不能以一个数字。 @ChrisJ 哦。你是对的。好吧,那我看不到直接的答案。使用经过测试的设置它可以正常工作,所以我会把它留在那里供某人在某个日期使用。以上是关于从多个变量中删除前缀的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 中将多个文件的前缀重命名或删除为每个文件的编号