<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Code to identify all SAS programs in a directly with a specific text string in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465883#M118839</link>
    <description>&lt;P&gt;I rewrote your macro, feel free to improve, there are still many gaps:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro srch_dir(dir  =\\WFSISF20\Reports\Service Files\Code
               ,words= first_var second_var third_var);

  %if %length(&amp;amp;words)=0 %then %return;
  %local nbfiles nbmatch s;
  %let s=s; %if %sysfunc(countw(&amp;amp;words,%str( )))=1 %then %let s=;

  filename PIPED pipe %if &amp;amp;sysscp.=WIN %then "dir /b ""&amp;amp;dir"" "; %else "ls ""&amp;amp;dir"" ";;
  data PROGS;
    infile PIPED pad;
    input PROGNAME $256.;
    call symput('nbfiles','1');
  run;
  filename PIPED clear;

  %if ^%length(&amp;amp;nbfiles) %then %do;
    %put WARNING: No files found in directory &amp;amp;dir..;
    %return;
  %end;

  data LINES(keep=PROGNAME WORD TEXTLINE N);
    set PROGS;
    length WORD FILEVAR $256;
    FILEVAR=catt("&amp;amp;dir", ifc("&amp;amp;sysscp"="WIN",'\','/'), PROGNAME);
    infile dummy filevar=FILEVAR truncover end=EOF pad;
    do until(EOF);
      N=sum(N,1);
      input TEXTLINE $256.;
      do J=1 to countw("&amp;amp;words",' ');
        WORD = scan("&amp;amp;words",J,' ');
        if prxmatch(catt('/\b',WORD,'\b/i'),TEXTLINE) then output;
        call symput('nbmatch','1');
      end;
    end;
  run;

  %if ^%length(&amp;amp;nbmatch) %then %do;
    %put WARNING: No files in &amp;amp;dir contain the word&amp;amp;s &amp;amp;words..;
    %return;
  %end;

  title "Programs in &amp;amp;dir with occurrences of the word&amp;amp;s";
  title2 "&amp;amp;words";
  options ls=116 ps=85;

  proc report data=LINES nowd split='#';
    column PROGNAME WORD N TEXTLINE;
    define PROGNAME / order "Program Name" width=20 flow;
    define WORD     / order "Word Found";
    define N        / order "Line Number";
    define TEXTLINE / "Line" width=40 flow;
    break after PROGNAME / page;
    break after WORD    / skip;
  run;

  title;

  proc datasets lib=WORK nolist;
    delete LINES ELINES WORDS PROGS;
  quit;

%mend; %* You should restore the options here;

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 30 May 2018 03:43:02 GMT</pubDate>
    <dc:creator>ChrisNZ</dc:creator>
    <dc:date>2018-05-30T03:43:02Z</dc:date>
    <item>
      <title>Code to identify all SAS programs in a directly with a specific text string</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465861#M118834</link>
      <description>&lt;P&gt;Hello all.&amp;nbsp; I am working on a project where I need to identify all SAS programs&amp;nbsp; that are using a list of variables anywhere in the program.&amp;nbsp; I would like to be able to search a directory at a time and have SAS output the program names that use those variables.&amp;nbsp; I have been using the below code, however it is only identifying if the variables are being used in joins etc and doesn't flag the report if it is just in the select statement.&amp;nbsp; Any help would be greatly appreciated!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%macro srch_dir(dir=\\WFSISF20\Reports\Service Files\Code&lt;BR /&gt;&amp;nbsp;,words=&lt;BR /&gt;&amp;nbsp;&amp;nbsp;first_var second_var third_var);&lt;/P&gt;&lt;P&gt;%let words=%upcase(&amp;amp;words);&lt;BR /&gt;%if &amp;amp;sysscp=%str(WIN) %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filename piped pipe "dir /b ""&amp;amp;dir"" ";&lt;BR /&gt;%end;&lt;BR /&gt;%else %if &amp;amp;sysscp=%str(SUN 4) %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filename piped pipe "ls ""&amp;amp;dir"" ";&lt;BR /&gt;%end;&lt;/P&gt;&lt;P&gt;data work.progs;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; length progname $200;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infile piped;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input progname;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;filename piped clear;&lt;/P&gt;&lt;P&gt;data _null_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain n 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput('n',n);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set work.progs (obs=0) nobs=n;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data work.words (keep=w word);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; length word $300 words $300;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain words "&amp;amp;words";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; word = scan(words,w,' ');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do while (word ne '');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w + 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; word = scan(words,w,' ');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput('w',w-1);&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;%if &amp;amp;n &amp;gt; 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do i=1 %to &amp;amp;n;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data _null_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain n &amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set work.progs point=n;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput('progname',progname);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;sysscp=%str(WIN) %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let prog=&amp;amp;dir\&amp;amp;progname;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %if &amp;amp;sysscp=%str(SUN 4) %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let prog=&amp;amp;dir/&amp;amp;progname;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data work.elines(keep=program word textline n);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file = "&amp;amp;prog";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; length word $300 program $200;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain program "&amp;amp;prog" file "&amp;amp;prog";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infile dummy filevar=file truncover end=eof;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input textline $200.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; textline = upcase(textline);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n+1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do j = 1 %to &amp;amp;w;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; word = scan("&amp;amp;words",&amp;amp;j,' ');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if indexw(upcase(textline),word)&amp;gt;0 then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc append base=work.lines new=work.elines;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data _null_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain numobs 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput('numobs',numobs);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set work.lines (obs=0) nobs=numobs;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;numobs &amp;gt; 0 %then %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title Programs in &amp;amp;dir with occurrences of the word(s)&lt;BR /&gt;&amp;amp;words;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; options ls=116 ps=85;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc report data=work.lines nowd split='#';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; column program word n textline;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break after program / page;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break after word / skip;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; define program / order "Program Name" width=20 flow;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; define word / order "Word Found";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; define n / order "Line Number";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; define textline / "Line" width=40 flow;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc datasets lib=work nolist;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete lines elines words progs;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data _null_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put "WARNING: No files in &amp;amp;dir contain the word(s)&lt;BR /&gt;&amp;amp;words";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;%end;&lt;/P&gt;&lt;P&gt;%else %do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data _null_;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; put "WARNING: No files found in directory &amp;amp;dir";&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;%end;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;</description>
      <pubDate>Tue, 29 May 2018 23:04:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465861#M118834</guid>
      <dc:creator>Scott13</dc:creator>
      <dc:date>2018-05-29T23:04:42Z</dc:date>
    </item>
    <item>
      <title>Re: Code to identify all SAS programs in a directly with a specific text string</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465878#M118836</link>
      <description>&lt;P&gt;1- Maybe&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;if indexw(upcase(textline),&lt;STRONG&gt;trim&lt;/STRONG&gt;(word))&amp;gt;0 then&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;would work better?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;2-&amp;nbsp;Look at how the&amp;nbsp;&lt;EM&gt;FILEVAR&lt;/EM&gt;= option&amp;nbsp;is &lt;A href="http://support.sas.com/techsup/technote/ts581.pdf" target="_self"&gt;properly used&lt;/A&gt;,&amp;nbsp;to simplify your code significantly.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;3- Note that you are not taking word&amp;nbsp;boundaries&amp;nbsp;into account&amp;nbsp;in your search.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;So while looking for VARNAME you'll also flag VARNAME2.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 30 May 2018 01:37:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465878#M118836</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2018-05-30T01:37:10Z</dc:date>
    </item>
    <item>
      <title>Re: Code to identify all SAS programs in a directly with a specific text string</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465879#M118837</link>
      <description>&lt;P&gt;You can use&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;if prxmatch(catt('/\b',WORD,'\b/i'),TEXTLINE) then&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;to take word boundaries into account.&lt;/P&gt;</description>
      <pubDate>Wed, 30 May 2018 01:42:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465879#M118837</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2018-05-30T01:42:31Z</dc:date>
    </item>
    <item>
      <title>Re: Code to identify all SAS programs in a directly with a specific text string</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465881#M118838</link>
      <description>&lt;P&gt;Here's something I prepared earlier. I ran it over my macros directory looking for putmsg, because it's a macro that my macros themselves call a lot.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%search_directory(path=\\my\macro\directory\path, string=putmsg);&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;String putmsg found in collapse.sas.
String putmsg found in count.sas.
String putmsg found in countobs.sas.
String putmsg found in csv.sas.
String putmsg found in dup.sas.
String putmsg found in freq.sas.
String putmsg found in genfmt.sas.
String putmsg found in lrb.sas.
String putmsg found in mixcase.sas.
String putmsg found in putmsg.sas.
String putmsg found in varexp.sas.
11 entries found in path for putmsg.&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The output ain't flash, because for me it doesn't need to be&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's the code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro search_directory(path=, string=, suffix=sas);
%local did fid rc infocnt fileref i found strlen count mprint notes;
%let fileref = source;
%let rc = %sysfunc(filename(fileref, &amp;amp;path));
%if &amp;amp;rc ne 0 %then
    %put %sysfunc(sysmsg());
%do i = 1 %to 20;
    %let did = %sysfunc(dclose(&amp;amp;i));
    %end;
%let did = %sysfunc(dopen(&amp;amp;fileref));
%let i = 0;
%let notes = %sysfunc(getoption(notes));
%let mprint = %sysfunc(getoption(mprint));
option nonotes nomprint;
%let strlen = %length(&amp;amp;string);
%let count = 0;
%do %until(&amp;amp;dname = );
    %let i = %eval(&amp;amp;i + 1);
    %let dname = %qsysfunc(dread(&amp;amp;did, &amp;amp;i));
    %if %nrbquote(&amp;amp;dname) ne and %qsysfunc(indexc(%superq(dname), %bquote(&amp;amp;))) = 0 %then %do;
        %if %lowcase(%scan(&amp;amp;dname, -1, %str(.))) = &amp;amp;suffix %then %do;
            %let found = 0;
            data _null_;
            infile "&amp;amp;path.\&amp;amp;dname";
            input @"&amp;amp;string" +(-&amp;amp;strlen) string $char&amp;amp;strlen..;
            if string = "&amp;amp;string" then
               call symput('found', '1');
            run;
            %if %eval(&amp;amp;found ne 0) %then %do;
                %let count = %eval(&amp;amp;count + 1);
                %put String &amp;amp;string found in &amp;amp;dname..;
                %end;
            %end;
        %end;
    %end;
%put &amp;amp;count entries found in path for &amp;amp;string..;
%let rc = %sysfunc(dclose(&amp;amp;did));
%put %sysfunc(sysmsg());
%let rc = %sysfunc(filename(fileref));
%put %sysfunc(sysmsg());
option &amp;amp;mprint &amp;amp;notes;
%mend search_directory;

&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 30 May 2018 02:10:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465881#M118838</guid>
      <dc:creator>LaurieF</dc:creator>
      <dc:date>2018-05-30T02:10:17Z</dc:date>
    </item>
    <item>
      <title>Re: Code to identify all SAS programs in a directly with a specific text string</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465883#M118839</link>
      <description>&lt;P&gt;I rewrote your macro, feel free to improve, there are still many gaps:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro srch_dir(dir  =\\WFSISF20\Reports\Service Files\Code
               ,words= first_var second_var third_var);

  %if %length(&amp;amp;words)=0 %then %return;
  %local nbfiles nbmatch s;
  %let s=s; %if %sysfunc(countw(&amp;amp;words,%str( )))=1 %then %let s=;

  filename PIPED pipe %if &amp;amp;sysscp.=WIN %then "dir /b ""&amp;amp;dir"" "; %else "ls ""&amp;amp;dir"" ";;
  data PROGS;
    infile PIPED pad;
    input PROGNAME $256.;
    call symput('nbfiles','1');
  run;
  filename PIPED clear;

  %if ^%length(&amp;amp;nbfiles) %then %do;
    %put WARNING: No files found in directory &amp;amp;dir..;
    %return;
  %end;

  data LINES(keep=PROGNAME WORD TEXTLINE N);
    set PROGS;
    length WORD FILEVAR $256;
    FILEVAR=catt("&amp;amp;dir", ifc("&amp;amp;sysscp"="WIN",'\','/'), PROGNAME);
    infile dummy filevar=FILEVAR truncover end=EOF pad;
    do until(EOF);
      N=sum(N,1);
      input TEXTLINE $256.;
      do J=1 to countw("&amp;amp;words",' ');
        WORD = scan("&amp;amp;words",J,' ');
        if prxmatch(catt('/\b',WORD,'\b/i'),TEXTLINE) then output;
        call symput('nbmatch','1');
      end;
    end;
  run;

  %if ^%length(&amp;amp;nbmatch) %then %do;
    %put WARNING: No files in &amp;amp;dir contain the word&amp;amp;s &amp;amp;words..;
    %return;
  %end;

  title "Programs in &amp;amp;dir with occurrences of the word&amp;amp;s";
  title2 "&amp;amp;words";
  options ls=116 ps=85;

  proc report data=LINES nowd split='#';
    column PROGNAME WORD N TEXTLINE;
    define PROGNAME / order "Program Name" width=20 flow;
    define WORD     / order "Word Found";
    define N        / order "Line Number";
    define TEXTLINE / "Line" width=40 flow;
    break after PROGNAME / page;
    break after WORD    / skip;
  run;

  title;

  proc datasets lib=WORK nolist;
    delete LINES ELINES WORDS PROGS;
  quit;

%mend; %* You should restore the options here;

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 30 May 2018 03:43:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465883#M118839</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2018-05-30T03:43:02Z</dc:date>
    </item>
    <item>
      <title>Re: Code to identify all SAS programs in a directly with a specific text string</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465980#M118879</link>
      <description>&lt;P&gt;Thanks ChrisNZ, this seems to be doing exactly what I need!&lt;/P&gt;</description>
      <pubDate>Wed, 30 May 2018 12:27:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Code-to-identify-all-SAS-programs-in-a-directly-with-a-specific/m-p/465980#M118879</guid>
      <dc:creator>Scott13</dc:creator>
      <dc:date>2018-05-30T12:27:56Z</dc:date>
    </item>
  </channel>
</rss>

