<?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: Using Macro to do loop and to append all the result in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629929#M186421</link>
    <description>Thank you Chris! It's also helpful.</description>
    <pubDate>Thu, 05 Mar 2020 19:43:32 GMT</pubDate>
    <dc:creator>qqian</dc:creator>
    <dc:date>2020-03-05T19:43:32Z</dc:date>
    <item>
      <title>Using Macro to do loop and to append all the result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629665#M186263</link>
      <description>&lt;P&gt;I have a table called 'topcode' which includes 2 codes in a column called 'code'. (will be more in reality, can reach 30)&lt;/P&gt;&lt;P&gt;I write a query to get the 2 code values (assume code62 and code400).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;BR /&gt;select distinct code into : top2code separated by ' ' from topcode;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have 2 other tables having the same structure as follows:&lt;/P&gt;&lt;P&gt;table 1&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;users&lt;/TD&gt;&lt;TD&gt;code1&lt;/TD&gt;&lt;TD&gt;code5&lt;/TD&gt;&lt;TD&gt;code62&lt;/TD&gt;&lt;TD&gt;code44&lt;/TD&gt;&lt;TD&gt;code400&lt;/TD&gt;&lt;TD&gt;code999&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;user1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;user2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;user3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;user4&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;user5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;table 2&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;users&lt;/TD&gt;&lt;TD&gt;code2&lt;/TD&gt;&lt;TD&gt;code5&lt;/TD&gt;&lt;TD&gt;code30&lt;/TD&gt;&lt;TD&gt;code62&lt;/TD&gt;&lt;TD&gt;code400&lt;/TD&gt;&lt;TD&gt;code500&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;user1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;user2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;user3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;user4&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;user5&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to loop over the topcode, and get the sum of 1s in each table and append them together.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%let i = 1;&lt;BR /&gt;%do i=1 %to %sysfunc(countw(&amp;amp;top2code));&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;select sum(%scan(&amp;amp;top2code, &amp;amp;i)) as flag1, count(*)-sum(%scan(&amp;amp;top2code, &amp;amp;i)) as flag0&lt;BR /&gt;from table1&lt;/P&gt;&lt;P&gt;UNION ALL&lt;BR /&gt;select sum(%scan(&amp;amp;top2code, &amp;amp;i)) as flag1, count(*)-sum(%scan(&amp;amp;top2code, &amp;amp;i)) as flag0&lt;BR /&gt;from table2&lt;BR /&gt;;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;%end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, I can only get result for the first code, which code62.&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;flag1&lt;/TD&gt;&lt;TD&gt;flag0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Is it possible to append code400 result below? such as:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;flag1&lt;/TD&gt;&lt;TD&gt;flag0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If not append, is there a way I can get result for all codes? Since there are more codes in reality, I have to use loop instead of calculate one by one manually.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 05 Mar 2020 00:23:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629665#M186263</guid>
      <dc:creator>qqian</dc:creator>
      <dc:date>2020-03-05T00:23:00Z</dc:date>
    </item>
    <item>
      <title>Re: Using Macro to do loop and to append all the result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629682#M186271</link>
      <description>Why SQL and macros? Why not just use PROC MEANS and pass the variable list into the VAR statement? How do table1/table2 interact with each other? That's not clear. &lt;BR /&gt;&lt;BR /&gt;Then your output will be in a single table anyways. Or you're combining just two which doesn't require a macro anyways.</description>
      <pubDate>Thu, 05 Mar 2020 02:46:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629682#M186271</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-03-05T02:46:29Z</dc:date>
    </item>
    <item>
      <title>Re: Using Macro to do loop and to append all the result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629702#M186278</link>
      <description>&lt;P&gt;Like this?&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;%macro loop;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; %local i;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; proc sql;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; create table WANT as&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; %do i=1 %to %sysfunc(countw(&amp;amp;top2code));&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;%if &amp;amp;i&amp;gt;1 then UNION ALL;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; &amp;nbsp; select sum(%scan(&amp;amp;top2code, &amp;amp;i)) as FLAG1, count(*)-sum(%scan(&amp;amp;top2code, &amp;amp;i)) as FLAG0&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from TABLE1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;UNION ALL&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;select sum(%scan(&amp;amp;top2code, &amp;amp;i)) as FLAG1, count(*)-sum(%scan(&amp;amp;top2code, &amp;amp;i)) as FLAG0&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;from TABLE2&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; %end;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; ;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; quit;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;%mend;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regarding the missing rows, what's in the log?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 05 Mar 2020 04:30:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629702#M186278</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2020-03-05T04:30:00Z</dc:date>
    </item>
    <item>
      <title>Re: Using Macro to do loop and to append all the result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629703#M186279</link>
      <description>&lt;P&gt;Otherwise, as Reeza suggested, something like this would arguably be more legible, and faster:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;proc sql noprint;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; select distinct cats('CODE',CODE) into :top2code separated by ' ' from TOPCODE;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;quit;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;data ALL/view=ALL;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; length SRC $4;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; set TABLE1(keep=&amp;amp;top2code in=A) &lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; TABLE2(keep=&amp;amp;top2code);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; src=ifc(A,'Tab1','Tab2');&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;run;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;proc summary data=ALL nway;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; class SRC;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; var CODE: COUNT:;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; output out=SUM(keep=SRC CODE: _FREQ_ ) sum=;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;run;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;You can then, for example, use proc transpose and calculate the differences in a final data step.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 05 Mar 2020 04:32:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629703#M186279</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2020-03-05T04:32:21Z</dc:date>
    </item>
    <item>
      <title>Re: Using Macro to do loop and to append all the result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629852#M186376</link>
      <description>Thank you! This is helpful. And I can use the following code first to pull all the codes into top2code, then directly use it in the proc means var part.&lt;BR /&gt;proc sql noprint;&lt;BR /&gt;select distinct code into : top2code separated by ' ' from topcode;&lt;BR /&gt;quit;&lt;BR /&gt;The only problem is I can set N, SUM to get the total number and total 1s, and have to create N-SUM one more step to get the count of 0s.&lt;BR /&gt;But this is helpful! Thanks!!&lt;BR /&gt;</description>
      <pubDate>Thu, 05 Mar 2020 15:59:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629852#M186376</guid>
      <dc:creator>qqian</dc:creator>
      <dc:date>2020-03-05T15:59:00Z</dc:date>
    </item>
    <item>
      <title>Re: Using Macro to do loop and to append all the result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629869#M186388</link>
      <description>You could look at PROC FREQ then since you're only interested in counts really.</description>
      <pubDate>Thu, 05 Mar 2020 16:28:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629869#M186388</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-03-05T16:28:19Z</dc:date>
    </item>
    <item>
      <title>Re: Using Macro to do loop and to append all the result</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629929#M186421</link>
      <description>Thank you Chris! It's also helpful.</description>
      <pubDate>Thu, 05 Mar 2020 19:43:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Using-Macro-to-do-loop-and-to-append-all-the-result/m-p/629929#M186421</guid>
      <dc:creator>qqian</dc:creator>
      <dc:date>2020-03-05T19:43:32Z</dc:date>
    </item>
  </channel>
</rss>

