首页 > 解决方案 > 检查 sas 代码中是否存在 %include 语句

问题描述

我有 SAS 代码,其中包含以下代码行

% 包括“/sas/dev/compare.sas”;

它位于服务器 /sas/cpm/dev/code 上的位置

所以,目前我正在做的是手动转到上面的路径并打开每个 .sas 代码(在一个文件夹中,你可以说 /sas/cpm/dev/code 有 4 个代码位置)并检查是否 %include "/sas /dev/compare.sas" 代码行是否存在

任何人都可以在不手动检查/打开 .sas 代码的情况下帮助我如何检查 %include "/sas/dev/compare.sas"; 存在与否

任何人都可以,请帮助我如何用 sas 编写,我们可以通过宏正确传递每个代码

谢谢

标签: sas

解决方案


您可以通过以下方式做到这一点:

  • 列出每个文件夹中的所有 .sas 文件,
  • 为每个文件创建一个 datasetp / infile 语句,
  • 搜索文件中的每一行% include "/sas/dev/compare.sas";
  • 如果找到行,则将文件名和行号打印到日志中

代码:

%let extension=sas;
%let FolderPath=\\sas\SASDATA\momo\;
%macro check_file_path(f=);
DATA _null_;
infile "&f" dsd ;
length string $200.;
input string $;
if string=&check. then put "&f. " "includes @ line " _N_= ;
run;
%mend;

Data List_files;
    rc=FILENAME('FMyRep',"&FolderPath");
    did=DOPEN('FMyRep');
    memcnt=DNUM(did);
    *count number of members  - including subfolders;
    DO i=1 TO memcnt;
        *for each member, test extension and store filename;
        filevar=LOWCASE(DREAD(did,i));
        file_path=cats("&FolderPath.",filevar);
        IF LOWCASE(SCAN(filevar,-1,".")) EQ LOWCASE("&extension") THEN
            OUTPUT;
    END;
    rc=DCLOSE(did);
    rc=FILENAME('FMyRep');
    KEEP filevar file_path;
RUN;
data _null_;
set List_files;
    call execute('%check_file_path(f='||file_path||')');
    put file_path=;
run;

输出:

file_path=\\sas\SASDATA\momo\file1.sas
file_path=\\sas\SASDATA\momo\file2.sas
file_path=\\sas\SASDATA\momo\file3.sas
file_path=\\sas\SASDATA\momo\file4.sas

日志:file4.sas 是唯一没有这个的% include "/sas/dev/compare.sas";

\\sas\SASDATA\momo\file1.sas includes @ line _N_=1
\\sas\SASDATA\momo\file2.sas includes @ line _N_=1
\\sas\SASDATA\momo\file4.sas includes @ line _N_=1

推荐阅读