проверить, существует ли оператор% include в коде sas или нет - PullRequest
0 голосов
/ 06 мая 2018

У меня есть код SAS, в который входит следующая строка кода

% включают "/sas/dev/compare.sas";

он находится на сервере / SAS / имп / DEV / код

Итак, в настоящее время то, что я делаю вручную, перейдите по указанному выше пути и откройте каждый код .sas (в папке вы можете сказать, что в / sas / cpm / dev / code находится 4 кода) и проверьте, включает ли% Строка кода "/sas/dev/compare.sas" присутствует или отсутствует

Может кто-нибудь помочь мне, не проверяя / открывая вручную .sas код, как проверить, включает ли%% "/sas/dev/compare.sas"; существует или нет

Может кто-нибудь, пожалуйста, помогите мне, как написать в SAS, Мы можем передать каждый код через макрос прямо

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы можете сделать это:

  • Список всех файлов .sas в каждой папке,
  • Создать оператор набора данных / 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
0 голосов
/ 06 мая 2018

вы можете сделать это с помощью функции 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; 
...