SAS如何引用数据集名列表 循环批量加载nbbo库指定数据集
问题1:通过名称列表调用指定单个数据集
核心方法是先将列表中存储的目标数据集名称提取为宏变量,后续拼接库名即可直接调用,无需硬编码数据集名。
示例代码:
/* 从名称列表中提取目标数据集名存入宏变量 */ proc sql noprint; select nbbo into :tgt_ds from project.daily_list where nbbo = 'NBBOM_20140102'; quit; /* 引用宏变量读取目标数据集 */ data X; set nbbo.&tgt_ds.; run;
问题2:批量循环读取nbbo列记录的所有数据集
根据实际需求选对应实现方式即可:
- 如果你需要把所有数据集纵向合并为一张总表,不需要写循环,直接拼接所有数据集路径一次性读入,执行效率更高:
/* 拼接所有带库名的数据集路径,用空格分隔 */ proc sql noprint; select catt('nbbo.', nbbo) into :all_ds_list separated by ' ' from project.daily_list; quit; /* 一次性读入所有数据集合并为总表 */ data nbbo_total; set &all_ds_list.; run;
- 如果你需要逐个读取每个数据集做单独处理(比如单表存文件、单表计算指标),用宏循环实现即可:
/* 先获取数据集总数量,以及所有带库名的数据集路径,存为编号宏变量 */ proc sql noprint; select count(*) into :ds_total from project.daily_list; select catt('nbbo.', nbbo) into :ds_1 - :ds_&ds_total. from project.daily_list; quit; /* 定义批量处理宏 */ %macro batch_process; %do i = 1 %to &ds_total.; /* 以下替换为你需要的单表处理逻辑,示例为逐表读入并存储到work库 */ data single_ds_&i.; set &&ds_&i.; /* 可新增筛选、计算字段等自定义处理步骤 */ run; %end; %mend; /* 执行批量处理 */ %batch_process;
注意:运行前请确认
project.daily_list中nbbo列记录的数据集名均在nbbo库下真实存在,避免出现找不到数据集的报错。如果存在无效名称,可以提前用exist()函数筛选有效记录后再执行上述逻辑。
内容的提问来源于stack exchange,提问作者amar96
相关产品推荐
相关产品推荐

