<?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: A question on writing a macro which can handle any number of parameter - Thanks in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188095#M35572</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you so much Tom. Yes,&amp;nbsp; Sale_1.......sale_7 datasets are available. FIN_SALE_ is the dataset that we want to sorted was in SET parameter. Later I used SALE_ instead of&amp;nbsp; FIN_SALE_.But doesn't matter what I do, it's not working. Please look at the log beloe again:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;1154&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1155 %macro fq(lib=, set=);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1156 %let lib=%upcase(&amp;amp;lib);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1157 %let set=%upcase(&amp;amp;set);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1158 proc sql;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1159 select memname into : indatasets separated by ' '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1160 from dictionary.tables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1161 where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1162 ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1163 quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1164&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1165 %let NumSets = %sysfunc(countw(&amp;amp;InDataSets));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1166&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1167 %do i = 1 %to &amp;amp;NumSets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1168 %let inset= %scan(&amp;amp;indatasets,&amp;amp;i);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1169 proc sort data = &amp;amp;inset&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1170 out = sale_&amp;amp;i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1171 by part_number;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1172 run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1173 %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1174&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1175 Data total_sale;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1176 merge&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1177 %do &amp;amp;i = 1 %to &amp;amp;numsets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1178 Sale_&amp;amp;i (in=in&amp;amp;i)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1179 %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1180 ; /* this ; ends the merge statement*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1181 by part_number;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1182 run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1183&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1184 %mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1185 %fq(lib=library, set=sale_); /* library should be the name of your library you want to use,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1185! set is the "stem" of the data sets you want to sort/ merge*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: No rows were selected.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ---------------------------------- No dataset could read&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SQL used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.15 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.01 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: File WORK.INDATASETS.DATA does not exist.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------------------------&amp;gt; ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR&amp;nbsp;&amp;nbsp; ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: The data set WORK.SALE_1 may be incomplete. When this step was stopped there were 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;observations and 0 variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Data set WORK.SALE_1 was not replaced because this step was stopped.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SORT used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.09 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: 2 is an invalid macro variable name for the index variable of the %DO loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: The macro FQ will stop executing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You are s much helpful Tom.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 27 Oct 2014 21:02:44 GMT</pubDate>
    <dc:creator>need_sas_help</dc:creator>
    <dc:date>2014-10-27T21:02:44Z</dc:date>
    <item>
      <title>A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188082#M35559</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have a macro as below where I am using parameter 1 to 6 [%fq (1) - %fq (6)]. But in real life I am not sure how many I am going to have and it can be any number.&lt;BR /&gt;I had hard-coded the marging statement [merge sale_1(in=a) sale_2(in=2) sale_3(in=3) sale_4(in=4) sale_5(in=5) sale_6(in=6)] upto to sales_6 dataset.&lt;BR /&gt;But it real world the number of dataset can be anything can be from sale_1 - sales_15. But always will keep the sequence 1,2,3,4,5,6,7,8,.........&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%macro fq (ps);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Proc sort datat = fin_sale_&amp;amp;ps &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out = sale_&amp;amp;ps; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by part_number;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data total_sale;&lt;BR /&gt;merge sale_1(in=a) sale_2(in=2) sale_3(in=3) sale_4(in=4) sale_5(in=5) sale_6(in=6);&lt;BR /&gt;by part_number;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%mend;&lt;BR /&gt;%fq (1);&lt;BR /&gt;%fq (2);&lt;BR /&gt;%fq (3);&lt;BR /&gt;%fq (4);&lt;BR /&gt;%fq (5);&lt;BR /&gt;%fq (6);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Is there anyway I can write such a macro where it can handle any number of datasets (sequestial) whatever is availabe in the source forlder.&lt;BR /&gt;Thank you so much for helpig me.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Oct 2014 21:24:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188082#M35559</guid>
      <dc:creator>need_sas_help</dc:creator>
      <dc:date>2014-10-16T21:24:19Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188083#M35560</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;%* try this out - its not clear where you get saleNbr from;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro fq (ps=,saleNbr=);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Proc sort data = fin_sale_&amp;amp;ps &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out = sale_&amp;amp;ps; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by part_number;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data total_sale;&lt;BR /&gt;/*merge sale_1(in=a) sale_2(in=2) sale_3(in=3) sale_4(in=4) sale_5(in=5) sale_6(in=6);*/&lt;BR /&gt;merge %do i = 1 to &amp;amp;saleNbr.; sale_&amp;amp;i.(in=a&amp;amp;i.); %end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; ; %* this semicolon ends the merge statement;&lt;BR /&gt;by part_number;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;%* note differing saleNbr value;&lt;BR /&gt;%fq (ps=1,saleNbr=6);&lt;BR /&gt;%fq (ps=2,saleNbr=6);&lt;BR /&gt;%fq (ps=3,saleNbr=15);&lt;BR /&gt;%fq (ps=4,saleNbr=6);&lt;BR /&gt;%fq (ps=5,saleNbr=6);&lt;BR /&gt;%fq (ps=6,saleNbr=16);&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Oct 2014 22:17:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188083#M35560</guid>
      <dc:creator>ShirleyInChchNZ</dc:creator>
      <dc:date>2014-10-16T22:17:06Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188084#M35561</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Something like this might work:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro fq(lib=, set=);&lt;BR /&gt;%let lib=%upcase(&amp;amp;lib);&lt;BR /&gt;%let set=%upcase(&amp;amp;set);&lt;BR /&gt;proc sql;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; select memname into : indatasets separated by ' '&lt;BR /&gt;&amp;nbsp;&amp;nbsp; from dictionary.tables &lt;BR /&gt;&amp;nbsp;&amp;nbsp; where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&lt;BR /&gt;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;%let NumSets = %sysfunc(countw(&amp;amp;InDataSets));&lt;/P&gt;&lt;P&gt;%do i = 1 %to &amp;amp;NumSets;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; %let inset= %scan(&amp;amp;indatasets,&amp;amp;i);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; proc sort data = &amp;amp;inset&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out = sale_&amp;amp;i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by part_number;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;%end;&lt;/P&gt;&lt;P&gt;Data total_sale;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; merge&lt;BR /&gt;&amp;nbsp;&amp;nbsp; %do &amp;amp;i = 1 %to &amp;amp;numsets;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sale_&amp;amp;i (in=in&amp;amp;i)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; ; /* this ; ends the merge statement*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp; by part_number;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;%mend;&lt;BR /&gt;%fq(lib=library, set=fin_sale_); /* library should be the name of your library you want to use, set is the "stem" of the data sets you want to sort/ merge*/&lt;/P&gt;&lt;P&gt;I am hoping that by "folder" you meant SAS library.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Oct 2014 22:24:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188084#M35561</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2014-10-16T22:24:14Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188085#M35562</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN class="j-status-levels"&gt;&lt;IMG alt="Newbie" class="jiveImage" src="https://communities.sas.com/5.0.2/images/status/statusicon-47.gif" title="Newbie" /&gt; &lt;/SPAN&gt;&lt;SPAN class="j-post-author "&gt;&lt;STRONG&gt;&lt;A _jive_internal="true" class="jiveTT-hover-user jive-username-link" data-avatarid="1003" data-externalid="" data-presence="null" data-userid="836662" data-username="ShirleyInChchNZ" href="https://communities.sas.com/people/ShirleyInChchNZ" id="jive-83666228950463162693186"&gt;ShirleyInChchNZ&lt;/A&gt; &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for this apporach. Problem is, I can not difine the vale for ps OR saleNbr. so I can not say: ps=1,saleNbr=6,&amp;nbsp; as I do not even know the maximum value for them.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Oct 2014 18:32:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188085#M35562</guid>
      <dc:creator>need_sas_help</dc:creator>
      <dc:date>2014-10-17T18:32:40Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188086#M35563</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Looks good. But as an example I have provided just a very simple and small part of a giant macro. I will try to impliment the idea you have provided. Not sure if it will work though. Thnaks a lot&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Oct 2014 18:40:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188086#M35563</guid>
      <dc:creator>need_sas_help</dc:creator>
      <dc:date>2014-10-17T18:40:21Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188087#M35564</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Not sure what the real question is here.&lt;/P&gt;&lt;P&gt;The example program probably just needs to use PROC TRANSPOSE rather than the complex code presented.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Otherwise the issue sounds like you just need to code a %DO loop in your macro.&lt;/P&gt;&lt;P&gt;%macro mytest(ps);&lt;/P&gt;&lt;P&gt;%local i ;&lt;/P&gt;&lt;P&gt;%do i=1 %to &amp;amp;ps ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; .... &amp;amp;i .....&lt;/P&gt;&lt;P&gt;%end;&lt;/P&gt;&lt;P&gt;%mend mytest ;&lt;/P&gt;&lt;P&gt;%mytest(6);&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 17 Oct 2014 18:49:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188087#M35564</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2014-10-17T18:49:49Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188088#M35565</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Ballaedw;&lt;/P&gt;&lt;P&gt;That was a brilliant solution. Actually I can use it for some many different macros. But I am having a lot of EROOR. Also I can not specify : indatasets separated by ' '. As I may have: Sale_1, Sale_2, Sale_3...........Sale_n. The pattern is always same but cannot hard code the program name as I do not know how many dataset will be like that in the directory. Sometimes the number of the datasets (same Pattern) can be 7 other time it can be 70. Need your help. If&amp;nbsp; I can use your code correctly it only solve my present issue but also will solve many other issues like this. Hope to hear from you.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;PLEASE FIND THE ERROR AS BELOW:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;343&lt;BR /&gt;344&amp;nbsp; %macro fq(lib=, set=);&lt;BR /&gt;345&amp;nbsp; %let lib=%upcase(&amp;amp;lib);&lt;BR /&gt;346&amp;nbsp; %let set=%upcase(&amp;amp;set);&lt;BR /&gt;347&amp;nbsp; proc sql;&lt;BR /&gt;348&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select memname into : sale_1 sale_2&lt;BR /&gt;349&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.tables&lt;BR /&gt;350&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&lt;BR /&gt;351&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;BR /&gt;352&amp;nbsp; quit;&lt;BR /&gt;353&lt;BR /&gt;354&amp;nbsp; %let NumSets = %sysfunc(countw(&amp;amp;InDataSets));&lt;BR /&gt;355&lt;BR /&gt;356&amp;nbsp; %do i = 1 %to &amp;amp;NumSets;&lt;BR /&gt;357&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let inset= %scan(&amp;amp;indatasets,&amp;amp;i);&lt;BR /&gt;358&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sort data = &amp;amp;inset&lt;BR /&gt;359&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out = sale_&amp;amp;i;&lt;BR /&gt;360&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by part_number;&lt;BR /&gt;361&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;362&amp;nbsp; %end;&lt;BR /&gt;363&lt;BR /&gt;364&amp;nbsp; Data total_sale;&lt;BR /&gt;365&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; merge&lt;BR /&gt;366&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do &amp;amp;i = 1 %to &amp;amp;numsets;&lt;BR /&gt;367&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sale_&amp;amp;i (in=in&amp;amp;i)&lt;BR /&gt;368&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;BR /&gt;369&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; /* this ; ends the merge statement*/&lt;BR /&gt;370&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by part_number;&lt;BR /&gt;371&amp;nbsp; run;&lt;BR /&gt;372&lt;BR /&gt;373&amp;nbsp; %mend;&lt;BR /&gt;374&amp;nbsp; %fq(lib=WORK, set=fin_sale_); /* library should be the name of your library you want to use,&lt;BR /&gt;374! set is the "stem" of the data sets you want to sort/ merge*/&lt;BR /&gt;NOTE: Line generated by the invoked macro "FQ".&lt;BR /&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql;&amp;nbsp;&amp;nbsp;&amp;nbsp; select memname into : sale_1 sale_2&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.tables&amp;nbsp;&amp;nbsp;&amp;nbsp; where&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; -------&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; 395&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; 76&lt;BR /&gt;1&amp;nbsp; ! libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&amp;nbsp;&amp;nbsp;&amp;nbsp; ; quit;&lt;BR /&gt;ERROR: File WORK.PROC.DATA does not exist.&lt;BR /&gt;ERROR: File WORK.SQL.DATA does not exist.&lt;BR /&gt;NOTE: Line generated by the invoked macro "FQ".&lt;BR /&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql;&amp;nbsp;&amp;nbsp;&amp;nbsp; select memname into : sale_1 sale_2&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.tables&amp;nbsp;&amp;nbsp;&amp;nbsp; where&lt;BR /&gt;1&amp;nbsp; ! libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&amp;nbsp;&amp;nbsp;&amp;nbsp; ; quit;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ----&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 180&lt;BR /&gt;ERROR 395-185: Opening parenthesis for SELECT/WHEN expression is missing.&lt;/P&gt;&lt;P&gt;ERROR 76-322: Syntax error, statement will be ignored.&lt;/P&gt;&lt;P&gt;ERROR 180-322: Statement is not valid or it is used out of proper order.&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;BR /&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;BR /&gt;WARNING: The data set WORK.TOTAL_SALE may be incomplete.&amp;nbsp; When this step was stopped there were 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; observations and 0 variables.&lt;BR /&gt;WARNING: Data set WORK.TOTAL_SALE was not replaced because this step was stopped.&lt;BR /&gt;NOTE: DATA statement used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 17:05.27&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.17 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: File WORK.INDATASETS.DATA does not exist.&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;BR /&gt;WARNING: The data set WORK.SALE_1 may be incomplete.&amp;nbsp; When this step was stopped there were 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; observations and 0 variables.&lt;BR /&gt;WARNING: Data set WORK.SALE_1 was not replaced because this step was stopped.&lt;BR /&gt;NOTE: PROCEDURE SORT used (Total process time):&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; real time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpu time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: 2 is an invalid macro variable name for the index variable of the %DO loop.&lt;BR /&gt;ERROR: The macro FQ will stop executing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;THANK YOU SO MUCH FROM THE BOTTOM OF MY HEART.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 24 Oct 2014 20:17:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188088#M35565</guid>
      <dc:creator>need_sas_help</dc:creator>
      <dc:date>2014-10-24T20:17:56Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188089#M35566</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Tom, You modified his solution. Try it exactly how it is, rather than modified, it should deal with a generic amount of data sets but puts them into a list and then loops through the list. It doesn't matter if it's 70 or 7.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 24 Oct 2014 20:44:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188089#M35566</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2014-10-24T20:44:35Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188090#M35567</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Fix the PROC SQL step that is generating the member names of the actual datasets.&amp;nbsp; The proposed solution was to use the SEPARATED BY clause so that all of the names are stored in a single macro variable.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier; background-color: #ffffff; font-size: 12pt;"&gt;select memname into : sale_1 &lt;SPAN style="color: #ff0000;"&gt;sale_2&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;becomes &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: #ffffff; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: #ffffff; font-family: 'courier new', courier; font-size: 12pt;"&gt;select memname into : &lt;SPAN style="background-color: #ffffff;"&gt;InDataSets separated by ' '&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: #ffffff; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 24 Oct 2014 20:47:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188090#M35567</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2014-10-24T20:47:07Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188091#M35568</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Below code not adding something new except for a bit "robustness" eventually helping you to avoid running into issues. For example: There is a LIKE operator in the SQL used to search for tables matching your table naming pattern. The possible issue: Your table pattern has underscores - but in a SQL Like expression an underscore is a placeholder for any character so it would also match stuff you don't want.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;options msglevel=I;&lt;/P&gt;&lt;P&gt;data&lt;/P&gt;&lt;P&gt;&amp;nbsp; fin_sale_1 (keep=part_number var ds1)&lt;/P&gt;&lt;P&gt;&amp;nbsp; fin_sale_2 (keep=part_number var ds2)&lt;/P&gt;&lt;P&gt;&amp;nbsp; fin_sale_3 (keep=part_number var ds3)&lt;/P&gt;&lt;P&gt;&amp;nbsp; fin_sales_total&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do part_number=1,9,4;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ds1='fin_sale_1';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output fin_sale_1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do part_number=4,6,3,20;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ds2='fin_sale_2';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output fin_sale_2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do part_number=9,6,4;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ds3='fin_sale_3';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output fin_sale_3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output fin_sales_total;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro fq(inlib=, inds_pattern=, key=part_number, outtbl=work.total_sale);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* create list of tables in a library following a naming pattern */&lt;/P&gt;&lt;P&gt;&amp;nbsp; proc sql feedback noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select cats(libname,'.',memname) into :intbl_list separated by ' '&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from dictionary.tables&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where libname="%upcase(&amp;amp;inlib)" and prxmatch("/^&amp;amp;inds_pattern/oi",memname) &amp;gt;0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by memname&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %put intbl_list: &amp;amp;intbl_list;&lt;/P&gt;&lt;P&gt;&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* prep SAS WORK: clean out left overs from previous runs */&lt;/P&gt;&lt;P&gt;&amp;nbsp; proc datasets lib=&amp;amp;inlib mt=(data view) noprint nowarn;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete __tmp_:;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* create sorted work tables from selected source tables */&lt;/P&gt;&lt;P&gt;&amp;nbsp; %let NumSets = %sysfunc(countw(&amp;amp;intbl_list,%str( )));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %do i = 1 %to &amp;amp;NumSets;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql feedback;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create table __tmp_%sysfunc(putn(&amp;amp;i,z4.)) as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select *&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from %scan(&amp;amp;intbl_list,&amp;amp;i,%str( ))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by &amp;amp;key&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* merge all sorted work tables */&lt;/P&gt;&lt;P&gt;&amp;nbsp; Data &amp;amp;outtbl;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; merge __tmp_:;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by &amp;amp;key;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* keep SAS WORK nice and tidy: clean out work tables no more required */&lt;/P&gt;&lt;P&gt;&amp;nbsp; proc datasets lib=&amp;amp;inlib mt=(data view) noprint nowarn;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete __tmp_:;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%fq(inlib=work, inds_pattern=fin_sale_);&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 25 Oct 2014 08:27:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188091#M35568</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2014-10-25T08:27:02Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188092#M35569</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Tom. But when I use the code exactly as same I find the following error:&amp;nbsp;&amp;nbsp;&amp;nbsp; Don't know how to fix it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;the details are as below:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;718 %fq (7);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: Input data set is already sorted; it has been copied to the output data set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: There were 56804 observations read from the data set WORK.SALE_7.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: The data set WORK.SALE_7 has 56804 observations and 14 variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SORT used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.51 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.01 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;719&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;720 %macro fq(lib=, set=);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;721 %let lib=%upcase(&amp;amp;lib);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;722 %let set=%upcase(&amp;amp;set);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;723 proc sql;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;724 select memname into : indatasets separated by ' '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;725 from dictionary.tables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;726 where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;727 ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;728 quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;729&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;730 %let NumSets = %sysfunc(countw(&amp;amp;InDataSets));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;731&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;732 %do i = 1 %to &amp;amp;NumSets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;733 %let inset= %scan(&amp;amp;indatasets,&amp;amp;i);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;734 proc sort data = &amp;amp;inset&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;735 out = sale_&amp;amp;i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;736 by part_number;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;737 run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;738 %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;739&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;740 Data total_sale;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;741 merge&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;742 %do &amp;amp;i = 1 %to &amp;amp;numsets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;743 Sale_&amp;amp;i (in=in&amp;amp;i)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;744 %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;745 ; /* this ; ends the merge statement*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;746 by part_number;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;747 run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;748&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;749 %mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;750 %fq(lib=library, set=fin_sale_); /* library should be the name of your library you want to&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;750! use, set is the "stem" of the data sets you want to sort/ merge*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: No rows were selected.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SQL used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.07 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: File WORK.INDATASETS.DATA does not exist.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------------------------&amp;gt; ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR&amp;nbsp;&amp;nbsp; ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: The data set WORK.SALE_1 may be incomplete. When this step was stopped there were 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;observations and 0 variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Data set WORK.SALE_1 was not replaced because this step was stopped.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SORT used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: 2 is an invalid macro variable name for the index variable of the %DO loop.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -------------------------------------&amp;gt; ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: The macro FQ will stop executing.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------------------------------------&amp;gt; ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Oct 2014 20:14:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188092#M35569</guid>
      <dc:creator>need_sas_help</dc:creator>
      <dc:date>2014-10-27T20:14:31Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188093#M35570</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Reeza. I tried but it gives an error. I just replied to Tom's message. You can find the detail there. Would you be kind enough to look at the detail?&lt;/P&gt;&lt;P&gt;Thanks again&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Oct 2014 20:15:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188093#M35570</guid>
      <dc:creator>need_sas_help</dc:creator>
      <dc:date>2014-10-27T20:15:45Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188094#M35571</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So this line in your LOG is telling you that no actual dataset matched the selection criteria you provided. &lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;NOTE: No rows were selected.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The other errors are just a result of the failure to locate any datasets.&lt;/P&gt;&lt;P&gt;Do you actually have any datasets with names like LIBRARY.FIN_SALE_ ?&lt;/P&gt;&lt;P&gt;The only dataset that you are showing in your log is named WORK.SALE_7 .&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Oct 2014 20:35:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188094#M35571</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2014-10-27T20:35:12Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188095#M35572</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you so much Tom. Yes,&amp;nbsp; Sale_1.......sale_7 datasets are available. FIN_SALE_ is the dataset that we want to sorted was in SET parameter. Later I used SALE_ instead of&amp;nbsp; FIN_SALE_.But doesn't matter what I do, it's not working. Please look at the log beloe again:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;1154&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1155 %macro fq(lib=, set=);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1156 %let lib=%upcase(&amp;amp;lib);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1157 %let set=%upcase(&amp;amp;set);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1158 proc sql;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1159 select memname into : indatasets separated by ' '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1160 from dictionary.tables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1161 where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1162 ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1163 quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1164&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1165 %let NumSets = %sysfunc(countw(&amp;amp;InDataSets));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1166&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1167 %do i = 1 %to &amp;amp;NumSets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1168 %let inset= %scan(&amp;amp;indatasets,&amp;amp;i);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1169 proc sort data = &amp;amp;inset&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1170 out = sale_&amp;amp;i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1171 by part_number;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1172 run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1173 %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1174&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1175 Data total_sale;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1176 merge&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1177 %do &amp;amp;i = 1 %to &amp;amp;numsets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1178 Sale_&amp;amp;i (in=in&amp;amp;i)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1179 %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1180 ; /* this ; ends the merge statement*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1181 by part_number;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1182 run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1183&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1184 %mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1185 %fq(lib=library, set=sale_); /* library should be the name of your library you want to use,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1185! set is the "stem" of the data sets you want to sort/ merge*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: No rows were selected.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ---------------------------------- No dataset could read&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SQL used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.15 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.01 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: File WORK.INDATASETS.DATA does not exist.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ------------------------------------&amp;gt; ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR&amp;nbsp;&amp;nbsp; ERROR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: The data set WORK.SALE_1 may be incomplete. When this step was stopped there were 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;observations and 0 variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Data set WORK.SALE_1 was not replaced because this step was stopped.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SORT used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.09 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: 2 is an invalid macro variable name for the index variable of the %DO loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: The macro FQ will stop executing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You are s much helpful Tom.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Oct 2014 21:02:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188095#M35572</guid>
      <dc:creator>need_sas_help</dc:creator>
      <dc:date>2014-10-27T21:02:44Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188096#M35573</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Have you even defined a libname of LIBRARY any where in your program?&amp;nbsp; In your previous log the only dataset was in the WORK library and not the LIBRARY library.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Oct 2014 21:05:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188096#M35573</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2014-10-27T21:05:31Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188097#M35574</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Consider this practice in macro debugging. Remove the macro loop and see if the first part works on it's own. Test each section piece by piece and then move on from there.&lt;/P&gt;&lt;P&gt;IE for the first step, does this work:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let lib=%upcase(work);&lt;/P&gt;&lt;P&gt;%let set=%upcase(sales);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;select memname into : indatasets separated by ' '&lt;/P&gt;&lt;P&gt;from dictionary.tables&lt;/P&gt;&lt;P&gt;where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%put &amp;amp;indatasets;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Oct 2014 21:07:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188097#M35574</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2014-10-27T21:07:12Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188098#M35575</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The macro itself seems to be fine, but your libname is not library! &lt;BR /&gt;You should call your macro with the libname work.&lt;BR /&gt;Try it this way.&lt;/P&gt;&lt;P&gt;%fq(lib=work, set=sale_);&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 28 Oct 2014 15:29:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188098#M35575</guid>
      <dc:creator>Domenico</dc:creator>
      <dc:date>2014-10-28T15:29:51Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188099#M35576</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you so much Tom. No, Work library was not the issue as by mistakely I had pasted a typo. Please take a look at the below. For sine reason it is not picking up the variables sale_1.......sale_7, Also the Do Loop Macro may have a issue:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style=": ; font-size: 8pt;"&gt; &lt;SPAN style="text-decoration: underline;"&gt; The Log is below:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: There were 56804 observations read from the data set WORK.SALE_7.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: The data set WORK.SALE_7 has 56804 observations and 14 variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SORT used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.90 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.10 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;516&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;517&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;518&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;519 %macro fq(lib=, set=);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;520 %let lib=%upcase(&amp;amp;lib);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;521 %let set=%upcase(&amp;amp;set);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;522 proc sql;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;523 select memname into : indatasets separated by ' '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;524 from dictionary.tables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;525 where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;526 ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;527 quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;528&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;529 %let NumSets = %sysfunc(countw(&amp;amp;InDataSets));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;530&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;531 %do i = 1 %to &amp;amp;NumSets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;532 %let inset= %scan(&amp;amp;indatasets,&amp;amp;i);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;533 proc sort data = &amp;amp;inset&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;534 out = sale_&amp;amp;i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;535 by part_number;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;536 run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;537 %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;538&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;539 Data total_sale;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;540 merge&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;541 %do &amp;amp;i = 1 %to &amp;amp;numsets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;542 Sale_&amp;amp;i (in=in&amp;amp;i)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;543 %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;544 ; /* this ; ends the merge statement*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;545 by part_number;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;546 run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;547&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;548 %mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;549 %fq(lib=work, set=fin_sale_); /* library should be the name of your library you want to use,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;549! set is the "stem" of the data sets you want to sort/ merge*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: No rows were selected.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SQL used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.35 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: File WORK.INDATASETS.DATA does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: The data set WORK.SALE_1 may be incomplete. When this step was stopped there were 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;observations and 0 variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Data set WORK.SALE_1 was not replaced because this step was stopped.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SORT used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.12 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: 2 is an invalid macro variable name for the index variable of the %DO loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: The macro FQ will stop executing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks a again&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 28 Oct 2014 18:29:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188099#M35576</guid>
      <dc:creator>need_sas_help</dc:creator>
      <dc:date>2014-10-28T18:29:31Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188100#M35577</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Domenico. I tried that way too. For some reason the code is not picking up sale_1.... sale7 though they are in the work directory. Also Do Loop has a issue. Please get the log as below after running your suggested code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;553 %let lib=%upcase(&amp;amp;lib);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;554 %let set=%upcase(&amp;amp;set);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;555 proc sql;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;556 select memname into : indatasets separated by ' '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;557 from dictionary.tables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;558 where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;559 ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;560 quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;561&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;562 %let NumSets = %sysfunc(countw(&amp;amp;InDataSets));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;563&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;564 %do i = 1 %to &amp;amp;NumSets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;565 %let inset= %scan(&amp;amp;indatasets,&amp;amp;i);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;566 proc sort data = &amp;amp;inset&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;567 out = sale_&amp;amp;i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;568 by part_number;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;569 run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;570 %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;571&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;572 Data total_sale;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;573 merge&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;574 %do &amp;amp;i = 1 %to &amp;amp;numsets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;575 Sale_&amp;amp;i (in=in&amp;amp;i)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;576 %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;577 ; /* this ; ends the merge statement*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;578 by part_number;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;579 run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;580&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;581 %mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;582 %fq(lib=work, set=sale_);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: Line generated by the invoked macro "FQ".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1 proc sql; select memname into : indatasets separated by ' ' from dictionary.tables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-------&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;395&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;76&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1 ! where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%" ; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: File WORK.PROC.DATA does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: File WORK.SQL.DATA does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: Line generated by the invoked macro "FQ".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1 proc sql; select memname into : indatasets separated by ' ' from dictionary.tables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1 ! where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%" ; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;----&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;180&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR 395-185: Opening parenthesis for SELECT/WHEN expression is missing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR 76-322: Syntax error, statement will be ignored.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR 180-322: Statement is not valid or it is used out of proper order.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Apparent symbolic reference INDATASETS not resolved.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: The data set WORK.TOTAL_SALE may be incomplete. When this step was stopped there were 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;observations and 0 variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: DATA statement used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 10:19.65&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 1.75 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: File WORK.INDATASETS.DATA does not exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: The data set WORK.SALE_1 may be incomplete. When this step was stopped there were 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;observations and 0 variables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WARNING: Data set WORK.SALE_1 was not replaced because this step was stopped.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SORT used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.00 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: 2 is an invalid macro variable name for the index variable of the %DO loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: The macro FQ will stop executing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;583 /* library should be the name of your library you want to use, set is the "stem" of the data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;583! sets you want to sort/ merge*/&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 28 Oct 2014 18:33:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188100#M35577</guid>
      <dc:creator>need_sas_help</dc:creator>
      <dc:date>2014-10-28T18:33:06Z</dc:date>
    </item>
    <item>
      <title>Re: A question on writing a macro which can handle any number of parameter - Thanks</title>
      <link>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188101#M35578</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt; Thnaks Reza. It is picking up the sale_1 .... sale_n dataset. then is there any problem with do loop? you can find the long created by running your debug code. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;920&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;921&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;922&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;923 %let lib=%upcase(work);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;924 %let set=%upcase(sale_);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;925 proc sql;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;926 select memname into : indatasets separated by ' '&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;927 from dictionary.tables&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;928 where libname="&amp;amp;LIB" and memname like "&amp;amp;set.%"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;929 ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;930 quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SQL used (Total process time):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;real time 0.15 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cpu time 0.01 seconds&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;931&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;932&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;933 %put &amp;amp;indatasets;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SALE_1 SALE_2 SALE_3 SALE_4 SALE_5 SALE_6 SALE_7&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 28 Oct 2014 20:06:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/A-question-on-writing-a-macro-which-can-handle-any-number-of/m-p/188101#M35578</guid>
      <dc:creator>need_sas_help</dc:creator>
      <dc:date>2014-10-28T20:06:56Z</dc:date>
    </item>
  </channel>
</rss>

