如何通过SAS SQL从指定SAS数据集中筛选特定前缀及指定列?
解决方案:动态提取指定列
问题原因
你之前尝试的代码select sorting_initial_2.* from WORK.DATA_SAM存在语法逻辑错误:sorting_initial_2是存储列名的记录表,和WORK.DATA_SAM没有关联关系,无法直接通过它指定要提取的字段,必须通过宏变量动态拼接列名列表来实现需求。
正确实现步骤
步骤1:将目标列名拼接为宏变量
用PROC SQL的into子句,把sorting_initial_2中的列名合并成逗号分隔的字符串,存入宏变量&cols:
proc sql noprint; select name into :cols separated by ',' from sorting_initial_2; quit;
noprint:避免输出冗余查询结果into :cols separated by ',':将所有符合条件的列名用逗号连接,存储到宏变量cols中
步骤2:使用宏变量提取目标列
在查询中直接引用宏变量&cols,即可动态指定要提取的字段:
proc sql; create table sorting_initial_3 as select &cols from WORK.DATA_SAM; quit;
宏变量&cols会被替换成实际的列名字符串(例如client,goal_amount,goal_date),从而精准提取所需列。
简化版:一步完成列筛选与提取
可以省略中间表Sorting_Initial_1和sorting_initial_2,直接从元数据中获取目标列并生成结果:
proc sql noprint; select name into :cols separated by ',' from SASHELP.VCOLUMN where libname = 'WORK' and memname = 'DATA_SAM' and (name = 'client' or name like 'goal%'); quit; proc sql; create table sorting_initial_3 as select &cols from WORK.DATA_SAM; quit;
内容的提问来源于stack exchange,提问作者sra
相关产品推荐
相关产品推荐

