【问题标题】:Delete the last 3 letters set sas variables删除最后3个字母设置sas变量
【发布时间】:2013-09-25 21:23:59
【问题描述】:

我想从 SAS 数据集中的一组变量中删除最后 3 个字母。 (必须连接 2 个数据集。)

并且在第一组中,变量被命名为例如: abc , 定义, 吉...

在第二组中,它们被命名为: abc_1A , def_1A , ghi_1A ...

如何从 100 多个变量中删除“_1A”?我不想简单地将“_1A”添加到我的第一个数据集

谢谢

【问题讨论】:

    标签: sas


    【解决方案1】:

    有几个选项。这是一个“安全”选项和一个“不安全”选项。

    安全选项:

    编写一个宏将变量重命名为不带 _1A 的名称。 参数:var = 变量名,len = 最终变量名所需的长度。;

    %macro rename_shorter(var=,len=);
    &var. = %substr(&var.,1,&len.)
    %mend rename_shorter;
    

    从 dictionary.columns 创建调用列表;

    proc sql;
    select cats('%rename_shorter(var=',name,',len=',length(name)-3,')') 
     into :renamelist separated by ' '
     from dictionary.columns
     where libname='SASHELP' and upcase(memname)='CLASS';
    quit;
    

    调用该列表;

    data want;
    set sashelp.class(rename=(&renamelist.));
    run;
    

    一个不安全选项,在某种意义上,它不检查事物是否正确对齐,是

    proc sql;
    create table want as 
     select * from have_namedright H
     outer union corr
     select * from have_namedwrong W
    ;
    quit;
    

    【讨论】:

    • 请注意,此代码不会按原样运行,因为某些列名只有三个字符长。
    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 2019-01-23
    • 2013-04-23
    • 2014-04-14
    • 2010-12-20
    • 2017-01-29
    • 2016-01-21
    • 2011-10-20
    相关资源
    最近更新 更多