SAS如何循环遍历文件夹 用PROC COMPARE批量对比同名数据集
两个文件夹同名SAS数据集批量比对实现方案
完全可以通过循环遍历的方式实现逐数据集自动一致性校验,你原有宏代码缺少「提取路径下数据集名列表」「定义循环终止值」「动态传入每次比对的数据集名」三个核心模块,修正后可直接运行的完整代码如下:
%macro compare(dpath=, cpath=); * 为两个待比对文件夹分配临时SAS逻辑库; libname dlib "&dpath"; libname clib "&cpath"; * 提取基准文件夹下所有SAS数据集名称,生成遍历列表; data ds_list; set sashelp.vmember; where libname = 'DLIB' and memtype = 'DATA'; keep memname; run; * 生成循环所需宏变量:数据集总数、每个数据集的名称; proc sql noprint; select count(*) into :n trimmed from ds_list; select memname into :ds1-:ds&n trimmed from ds_list; quit; * 循环逐对调用PROC COMPARE比对同名数据集; %do i = 1 %to &n; proc compare base = dlib.&&ds&i compare = clib.&&ds&i listall; title "当前比对数据集:&&ds&i"; run; %end; * 清除临时逻辑库; libname dlib clear; libname clib clear; %mend; * 调用宏时传入两个文件夹的实际绝对路径即可; %compare(dpath=D:\data\folder1, cpath=D:\data\folder2);
使用说明
- 该方案适配两个文件夹内均为
.sas7bdat格式SAS数据集、文件名完全一一对应的场景,以第一个文件夹的数据集列表为遍历基准,自动匹配第二个文件夹下的同名文件做比对 proc compare后加的listall参数会输出所有不一致的变量、观测明细,如果仅需要判断是否一致不需要输出差异明细,直接删除该参数即可- 调用宏时请将示例路径替换为你本地两个数据集文件夹的实际绝对路径
- 如果需要统一归档比对结果,可以在宏开头添加ODS输出语句,将所有比对结果导出到同一个PDF/RTF/HTML文件,不需要逐份查看日志
内容的提问来源于stack exchange,提问作者B K
相关产品推荐
相关产品推荐

