通过在SAS中根据名称中的关键字选择变量来对数据集进行子集

时间:2014-11-11 00:12:00

标签: sas subset variable-names

我希望有人可以提供帮助。我有一个大型数据集导入SAS,有数千个变量。我想通过提取名称中包含特定关键字的变量来创建新数据集。例如,以下变量位于我的数据集中:

  

AAYAN_KK_Equity_Ask
  AAYAN_KK_Equity_Bid
  AAYAN_KK_Equity_Close
  AAYAN_KK_Equity_Date
  AAYAN_KK_Equity_Volume
  AAYANRE_KK_Equity_Ask
  AAYANRE_KK_Equity_Bid
  AAYANRE_KK_Equity_Close
  AAYANRE_KK_Equity_Date

我想在不知道变量名称的其余部分的情况下提取以_Ask和_Bid结尾的变量。有没有办法做到这一点?我想尝试使用do循环,但不知道如何指示SAS将每个变量的名称的最后部分与_Ask或_Bid进行比较。

后记。我想为每个集合创建一个新变量,该变量以变量的全名开头,除了最后一个部分(哪个是_Ask或_Bid)。我可以在使用赋值语句时这样做吗?

1 个答案:

答案 0 :(得分:3)

您可能想查询保存有关数据集元数据的sashelp.vtable。假设您的数据在库WORK中并且名为TABLE,则以下内容创建以ASK结尾的变量列表。

proc sql;
select name into :varlist separated by " "
from sashelp.vcolumn
where libname="WORK" and memname="TABLE" and upcase(name) like '%_ASK';
quit;

*To rename the variables with MID generate a rename statement;
proc sql;
    select catx("=", name, tranwrd(upcase(name), "_ASK", "_MID"))
    into :rename_list separated by " "
    from sashelp.vcolumn
    where libname="WORK" and memname="TABLE" and upcase(name) like '%_ASK';
quit;

%put &rename_list;


data want_ask;
set work.table
 (keep = &varlist);
 rename &rename_list;
run;