我刚刚开始学习 SAS,想看看是否有人知道如果它们包含某个单词,则可以从数据集中删除某些变量。我正在使用一个包含大量变量(100+)的数据集,其中包含“标签”一词,并希望删除这些变量。不幸的是,标签这个词出现在变量名的末尾,所以我不能做一个简单的下拉标签:;显然我可以单独列出所有要删除的变量,但我只是想看看那里是否有人知道完成这项任务的更简单方法。感谢您的阅读以及您提供的任何帮助。
问问题
7127 次
2 回答
3
您需要做的是提供一个包含变量名称的数据集,然后创建一个包含您要删除的宏变量。第一部分有三个(或更多)选项:
- 字典列
- sashelp.vcolumn
- proc 内容输出到数据集
所有这三个都给出相同的结果 - 变量名称(和其他内容)的数据集,然后您可以对其进行查询。
例如,使用PROC SQL
的SELECT 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 回答