从多个变量中删除前缀

时间:2018-04-16 03:43:41

标签: sql sas prefix

我有一个数据集" 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;**

它向我展示了以下内容:

警告:未解析显式符号引用SUFFIXLIST。 错误22-322:语法错误,期望以下之一:un nombre ,;。

提前致谢

1 个答案:

答案 0 :(得分:0)

我反过来做了类似的解决方案,它为变量添加了后缀。 这样做,是创建单个字符串,其中包含所有变量rename-commands。

请注意,这有点愚蠢,因为它会删除所有字符。只需在 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, _);