通过基于SAS中变量名称中的关键字选择变量来子集数据集

通过基于SAS中变量名称中的关键字选择变量来子集数据集,sas,subset,variable-names,Sas,Subset,Variable Names,我希望有人能帮忙。我将一个包含数千个变量的大型数据集导入SAS。我想通过提取名称中包含特定关键字的变量来创建一个新的数据集。例如,以下变量在我的数据集中: AAYAN_KK_Equity_Ask AAYAN_KK_Equity_出价 AAYAN_KK_Equity_Close AAYAN_KK_股权日 AAYAN_KK_股票_成交量 AAYANRE_KK_Equity_Ask AAYANRE_KK_Equity_出价 AAYANRE_KK_Equity_Close AAYANRE_KK_股权日

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

AAYAN_KK_Equity_Ask
AAYAN_KK_Equity_出价
AAYAN_KK_Equity_Close
AAYAN_KK_股权日
AAYAN_KK_股票_成交量
AAYANRE_KK_Equity_Ask
AAYANRE_KK_Equity_出价
AAYANRE_KK_Equity_Close
AAYANRE_KK_股权日

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


后记。我想为每个以变量全名开头的集合创建一个新变量,但最后一部分除外(即_Ask或_Bid)。我可以通过使用赋值语句来实现这一点吗?

您可能需要查询sashelp.vtable,它保存有关数据集的元数据。假设您的数据在库工作中并被称为表,下面将创建一个以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;

你会得到同名的变量吗?这是不允许的,或者你打算把它们放在单独的数据集中?最后带有_Bid或_Ask的变量,我想把它们放在单独的数据集中。稍后,我想从这些变量创建一个新变量,每个变量的名称相同,但结尾不同(变量将以_MID结尾,而不是_Bid或_Ask)。谢谢您的回答。但是,由于SAS将“%\u ASK”解释为宏变量,因此似乎存在问题。我得到以下消息:警告:宏的表面调用未解决,然后出现以下错误:在贡献表中未找到以下列:Clean_prices、Kuwait、libname、memname、name。为了使错误消息有意义,Kuwait是libname Clean_prices是数据集。我更新了代码。PROC SQL中带有
%
通配符的
类似
语句需要一个单引号,而不是给出的双引号。我希望我没有让你们发疯,但这对我来说已经开始起作用了。我尝试使用PROC-SQL,但没有成功。我得到了这个错误
错误:在贡献表中找不到以下列:name。
我进一步调查,看看有什么问题。我运行了以下
PROC PRINT
来检查sashelp.vtable
中的内容:
PROC PRINT data=sashelp.vtable noobs;在哪里工作;运行返回0个观察值。虽然我确信
sashelp.vtable
可用(我打开了它),但SAS似乎没有正确读取文件。我遗漏了什么或做错了什么?对不起,我应该参考SASHELP.VCOLUMN。但是,如果您的数据库位于服务器上,即SQL或Oracle,则这也可能不起作用。您的查询中可能有0,因为它区分大小写。请尝试libname=“WORK”。