检查%include语句是否存在于sas代码中

时间:2018-05-06 12:59:09

标签: sas

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

%include“/sas/dev/compare.sas”;

它位于服务器上的位置 / SAS / CPM的/ dev /代码

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

任何人都可以帮助我而不用手动检查/打开.sas代码如何检查%include是否包含“/sas/dev/compare.sas”;是否存在

任何人,请帮助我如何写sas, 我们可以通过宏右键传递每个代码

由于

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式执行此操作:

  • 列出每个文件夹中的所有.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

答案 1 :(得分:0)

您可以使用fileexist函数

来完成
%let  myfile = "/sas/dev/compare.sas";
  %macro filecheck;
  %if %sysfunc(fileexist(&myfile)) 
  %then % include "/sas/dev/compare.sas";
   %else  %put The external file &myfile does not exist.;
  %mend;       
  %filecheck;