【问题标题】:Delete prefix from multiple variables从多个变量中删除前缀
【发布时间】:2023-04-04 02:16:01
【问题描述】:

我有一个数据集“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 变量名不能以数字开头。

标签: sql sas prefix


【解决方案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 哦。你是对的。好吧,那我看不到直接的答案。使用经过测试的设置它可以正常工作,所以我会把它留在那里供某人在某个日期使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2020-04-16
  • 2011-05-08
  • 1970-01-01
  • 2023-04-05
  • 2018-08-25
相关资源
最近更新 更多