Sas 如何对Excel文件中列出的数据集名称运行Proc COMPARE

Sas 如何对Excel文件中列出的数据集名称运行Proc COMPARE,sas,Sas,用例:我有200多个SAS数据集,其名称在Excel文件中。我想编写一个SAS脚本,从Excel中读取数据集的名称(每次2个),并为它们运行一个过程比较 我不想写200多条proc比较语句。有没有办法做到这一点 另外,我是SAS的绝对初学者一种技术是导入数据集名称数据,并使用数据步骤生成步骤代码,并使用调用执行调用它 例如: proc import ... out=namesOfDataSets; ... data _null_; set namesOfDataSets; step

用例:我有200多个SAS数据集,其名称在Excel文件中。我想编写一个SAS脚本,从Excel中读取数据集的名称(每次2个),并为它们运行一个过程比较

我不想写200多条proc比较语句。有没有办法做到这一点


另外,我是SAS的绝对初学者

一种技术是导入数据集名称数据,并使用数据步骤生成步骤代码,并使用调用执行调用它

例如:

proc import ... out=namesOfDataSets;
...  

data _null_;
  set namesOfDataSets;
  stepcode = 'Proc Compare base=' || dataset1 || ' compare=' || dataset2 || ';';
  call execute (stepcode);

  if _n_ = 3 then stop; * remove this line once you are sure the step code is ok and you want to do all 200 ;
run;

我假设excel文件有两列,分别称为Set1和Set2,并且我们希望比较一行中的Set1和同一行中的Set2。我已经包括了我的测试数据的图片

下面的代码提供了一个简单的解决方案。导入数据集列表,为导入列表中的每一行编写比较步骤的代码,然后运行代码。当然,通过将选项或修改添加到put语句的引号中,您可以轻松地向comapare步骤添加选项或修改。用实际路径和文件名替换宏调用中的“yourpath”和“yourfile”

%macro compare (file=);
/*  Import list*/
proc import dbms=xlsx file="&file" out=list replace;
run;

/*  For each line in list, write code for a proc compare step to a temporary text file.*/
filename code temp;

data _null_;
    set list;
    file code;
    put "proc compare data=" set1 " compare=" set2 "; run;";
run;

/*  Run code*/
%include code;  
%mend;
%compare(file=%str(yourpath\yourfile.xlsx))

excel文件中的列是什么?excel文件包含要匹配为列的sas extract的名称