4

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

4

2 回答 2

3

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

  • 字典列
  • sashelp.vcolumn
  • proc 内容输出到数据集

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

例如,使用PROC SQLSELECT INTO功能来创建宏变量:

proc sql;
select name into :droplist separated by ' '
 from dictionary.columns
 where libname='SASHELP' and memname='CLASS'
 and name like '%eigh%';
quit;

(根据您的需要将 eigh 替换为 Label ;此处 % 是通配符)

然后你有一个宏变量&droplist,然后你可以在 drop 语句中使用它。

data want;
set sashelp.class;
drop &droplist;
run;
于 2013-10-24T17:52:56.880 回答
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. (大写用于减少大小写引起问题的可能性)

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

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

于 2013-10-24T17:59:38.270 回答