我希望有人可以提供帮助。我有一个大型数据集导入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)。我可以在使用赋值语句时这样做吗?
答案 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;