删除包含特定字符串的变量名称

时间:2013-10-24 17:46:15

标签: sas

我刚刚开始学习SAS,并且想知道是否有人知道如果数据集中包含某个单词,则从数据集中删除某些变量的方法。我正在使用包含大量变量(100+)的数据集,其中包含“标签”一词,我希望放弃这些变量。不幸的是,标签这个词出现在变量名的末尾,所以我不能做一个简单的drop标签:显然我可以单独列出要删除的所有变量,但我只是想知道是否有人知道更简单的方法来完成这项任务。感谢阅读和任何帮助,你必须提供。

2 个答案:

答案 0 :(得分:3)

您需要做的是提供一个包含变量名称的数据集,然后创建一个包含您要删除的宏变量。第一部分有三个(或更多)选项:

  • dictionary.columns
  • sashelp.vcolumn
  • 将内容输出发送到数据集

所有三个都给出相同的结果 - 变量名称(和其他东西)的数据集,然后您可以查询。

例如,使用PROC SQL的{​​{1}}功能创建宏变量:

SELECT INTO

(根据您的需要替换标签;%是通配符)

然后你有一个宏变量proc sql; select name into :droplist separated by ' ' from dictionary.columns where libname='SASHELP' and memname='CLASS' and name like '%eigh%'; quit; ,你可以在drop语句中使用它。

&droplist

答案 1 :(得分:3)

使用vcolumn表和proc sql创建宏变量宏变量:

proc sql noprint;

    select trim(compress(name))
    into :drop_vars separated by ' '
    from sashelp.vcolumn
    where libname = upcase('lib1')
        and
            memname = upcase('table1')
        and
            upcase(name) like '%LABEL%'
    ;
quit;

%put &drop_vars.;

data table2;
    set table1;
    drop  &drop_vars.;
run;

proc sql将创建名称中包含'lib1'的库label中table1的所有变量的列表,并将其放入名为drop_vars的宏变量中。 (upcase用于减少导致问题的可能性)

数据步骤然后使用drop语句和drop_vars变量删除列表中的所有变量。

注意:请务必检查%put statement的输出,以确保不删除要保留的变量