<?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: Compare multiple columns in macro - arrays in macros? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175073#M33629</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Something like this?&lt;/P&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; have;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;input&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; FSALDU $ Cmp_201301 Cmp_201302 Cmp_201304 cmp_201305;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;array&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; cmp&lt;LI&gt; cmp_:;&lt;BR /&gt;&lt;/LI&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;array&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; chg[&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;4&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;] $&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; chg_201301 chg_201302 chg_201304 chg_201305;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; i = &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;2&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;to&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; dim(cmp);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp&lt;I&gt;=cmp[i-&lt;/I&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; chg&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'S'&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; cmp&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;and&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; cmp[i-&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;]=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;.&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; chg&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'A'&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; cmp&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;.&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;and&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; cmp[i-&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;]=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; chg&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'R'&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;end&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;drop&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;cards&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffc0;"&gt;A0A1B0 1 . 1 1&lt;BR /&gt;A0A1C0 . . 1 .&lt;BR /&gt;A0A1G0 1 . . 1&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;;;;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;print&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 25 Aug 2014 20:10:43 GMT</pubDate>
    <dc:creator>data_null__</dc:creator>
    <dc:date>2014-08-25T20:10:43Z</dc:date>
    <item>
      <title>Compare multiple columns in macro - arrays in macros?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175072#M33628</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a dataset with a unique postal code and flags for ~80 campaigns that looks like:&lt;/P&gt;&lt;P&gt;FSALDU Cmp_201301 Cmp_201302 Cmp_201304 ....&lt;/P&gt;&lt;P&gt;A0A1B0 1 . 1&lt;/P&gt;&lt;P&gt;A0A1C0 . . 1&lt;/P&gt;&lt;P&gt;A0A1G0 1 . .&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;Data notes:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Campaign number is not consecutive&lt;/LI&gt;&lt;LI&gt;Flags on Campaign's are 1 or NULL&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What I am trying to do is compare the flags on each postal code to create a 'Change' variable (Same, Added, Removed) comparing to the previous campaign.&lt;/P&gt;&lt;P&gt;For example my output dataset would look like:&lt;/P&gt;&lt;P&gt;FSALDU Cmp_chg_201302 Cmp_chg_201304 ...&lt;/P&gt;&lt;P&gt;A0A1B0 Removed Added &lt;/P&gt;&lt;P&gt;A0A1C0 Same Added&lt;/P&gt;&lt;P&gt;A0A1G0 Removed Same&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To do this I create a macro with the comparison logic as:&lt;/P&gt;&lt;P&gt;%Macro Change(Prv_wk, Cur_wk) ;&lt;/P&gt;&lt;P&gt;IF Cmp_&amp;amp;Cur_wk=Cmp_&amp;amp;Prv_wk then Cmp_chg_&amp;amp;Cur_wk='Same' ;&lt;/P&gt;&lt;P&gt;IF Cmp_&amp;amp;Cur_wk=1 and Cmp_&amp;amp;Prv_wk=. then Cmp_chg_&amp;amp;Cur_wk='Added' ;&lt;/P&gt;&lt;P&gt;IF Cmp_&amp;amp;Cur_wk=. and Cmp_&amp;amp;Prv_wk=1 then Cmp_chg_&amp;amp;Cur_wk='Removed' ;&lt;/P&gt;&lt;P&gt;%mend ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Within my Data Step I have:&lt;/P&gt;&lt;P&gt;Data Change_table ; Set Master_Data_tbl ; &lt;/P&gt;&lt;P&gt;%Change(201301,201302) ; &lt;/P&gt;&lt;P&gt;%Change(201302,201304) ; &lt;/P&gt;&lt;P&gt;Keep FSALDU Cmp_chg: ;&lt;/P&gt;&lt;P&gt;RUN ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I could write the macro out 79 times to get the table i'm looking for, but I was wondering how I can optimize this code for automation. I imagine the solution would involve arrays and loops..&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for your help!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Aug 2014 19:36:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175072#M33628</guid>
      <dc:creator>DangIT</dc:creator>
      <dc:date>2014-08-25T19:36:03Z</dc:date>
    </item>
    <item>
      <title>Re: Compare multiple columns in macro - arrays in macros?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175073#M33629</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Something like this?&lt;/P&gt;&lt;DIV style="font-family: Courier New; font-size: 11pt;"&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;data&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; have;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;input&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; FSALDU $ Cmp_201301 Cmp_201302 Cmp_201304 cmp_201305;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;array&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; cmp&lt;LI&gt; cmp_:;&lt;BR /&gt;&lt;/LI&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;array&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; chg[&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;4&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;] $&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; chg_201301 chg_201302 chg_201304 chg_201305;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; i = &lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;2&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;to&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; dim(cmp);&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp&lt;I&gt;=cmp[i-&lt;/I&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; chg&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'S'&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; cmp&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;and&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; cmp[i-&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;]=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;.&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; chg&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'A'&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;else&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; cmp&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;.&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;and&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; cmp[i-&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;]=&lt;/SPAN&gt;&lt;STRONG style="color: #008080; background-color: #ffffff;"&gt;1&lt;/STRONG&gt; &lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt; chg&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #800080; background-color: #ffffff;"&gt;'R'&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;end&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;drop&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #0000ff; background-color: #ffffff;"&gt;cards&lt;/SPAN&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffc0;"&gt;A0A1B0 1 . 1 1&lt;BR /&gt;A0A1C0 . . 1 .&lt;BR /&gt;A0A1G0 1 . . 1&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;;;;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;proc&lt;/STRONG&gt; &lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;print&lt;/STRONG&gt;; &lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;STRONG style="color: #000080; background-color: #ffffff;"&gt;run&lt;/STRONG&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Aug 2014 20:10:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175073#M33629</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2014-08-25T20:10:43Z</dc:date>
    </item>
    <item>
      <title>Re: Compare multiple columns in macro - arrays in macros?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175074#M33630</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Well, you don't actually describe what it means to optimize code for automation.&amp;nbsp; Does it mean the fastest-running code, regardless of how complex it gets?&amp;nbsp; Does it mean the simplest code that is still reasonably fast, so that it is easy to modify and maintain?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;At any rate, data_null_ has a good approach.&amp;nbsp; If you are confident about your incoming values always being 1 or missing, you can speed it up slightly:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: #ffffff; color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #0000ff;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #000000;"&gt;&amp;nbsp; cmp&lt;I&gt;=cmp[i-&lt;/I&gt;&lt;/SPAN&gt;&lt;STRONG style="background-color: #ffffff; color: #008080;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="background-color: #ffffff; color: #000000;"&gt;] &lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #0000ff;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #000000;"&gt; chg&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #800080;"&gt;'S'&lt;/SPAN&gt;; &lt;SPAN style="background-color: #ffffff; color: #000000;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #0000ff;"&gt;else&lt;/SPAN&gt; &lt;SPAN style="background-color: #ffffff; color: #0000ff;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #000000;"&gt; cmp&lt;I&gt; &amp;gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #000000;"&gt; cmp[i-&lt;/SPAN&gt;&lt;STRONG style="background-color: #ffffff; color: #008080;"&gt;1&lt;/STRONG&gt;&lt;SPAN style="background-color: #ffffff; color: #000000;"&gt;]&lt;/SPAN&gt; &lt;SPAN style="background-color: #ffffff; color: #0000ff;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #000000;"&gt; chg&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #800080;"&gt;'A'&lt;/SPAN&gt;; &lt;SPAN style="background-color: #ffffff; color: #000000;"&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #0000ff;"&gt;else&lt;/SPAN&gt; &lt;SPAN style="background-color: #ffffff; color: #000000;"&gt;chg&lt;I&gt;=&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN style="background-color: #ffffff; color: #800080;"&gt;'R'&lt;/SPAN&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Aug 2014 20:18:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175074#M33630</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2014-08-25T20:18:32Z</dc:date>
    </item>
    <item>
      <title>Re: Compare multiple columns in macro - arrays in macros?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175075#M33631</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Astounding:&lt;/P&gt;&lt;P&gt;Good point. I mean optimized in terms of automation and not necessarily performance.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Data_Null:&lt;/P&gt;&lt;P&gt;Thanks for the reply.&lt;/P&gt;&lt;P&gt;I like the method, but every 2 weeks (sometimes 1) I will add a campaign, so the array for the Chg would have to be dynamic..&amp;nbsp; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Aug 2014 20:43:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175075#M33631</guid>
      <dc:creator>DangIT</dc:creator>
      <dc:date>2014-08-25T20:43:01Z</dc:date>
    </item>
    <item>
      <title>Re: Compare multiple columns in macro - arrays in macros?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175076#M33632</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;In that case, it would be wise to keep the code constant. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Instead of changing the code, maintain a separate file holding a list of the campaigns.&amp;nbsp; The file could be a text file, a SAS data set, a table ... doesn't matter as long as your program can read it.&amp;nbsp; Then the program should transform the list of campaigns into the variable names that the program will use.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What types of file(s) will your production system permit you to use, to hold and maintain a list of campaigns?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Some macro language will be involved but it will be minimal if you can store the list of campaigns as a SAS data set.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Aug 2014 20:50:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175076#M33632</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2014-08-25T20:50:29Z</dc:date>
    </item>
    <item>
      <title>Re: Compare multiple columns in macro - arrays in macros?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175077#M33633</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, I can store store a separate SAS dataset with the list of campaigns.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How would I use that to create the arrays in the restructuring program?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Aug 2014 21:03:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175077#M33633</guid>
      <dc:creator>DangIT</dc:creator>
      <dc:date>2014-08-25T21:03:33Z</dc:date>
    </item>
    <item>
      <title>Re: Compare multiple columns in macro - arrays in macros?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175078#M33634</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK.&amp;nbsp; Let's assume you store a SAS data set with just one variable:&amp;nbsp; WEEK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It should be character, with a length of 6, taking on values like 201301, 201302, etc.&amp;nbsp; There will be one observation for each week.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your program could look like this, to adjust automatically to the weeks in your data set:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp; select distinct ('Cmp_' || week) into : campaign_list separated by ' ' from my.list_of_weeks;&lt;/P&gt;&lt;P&gt;&amp;nbsp; select distinct ('Chg_' || week) into : change_list separated by ' ' from my.list_of_weeks;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;%put _user_;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array camps {*} &amp;amp;campaign_list;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array changes {*} $ 7 &amp;amp;change_list;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do _i_=2 to dim(camps);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if cmp{_i_} = cmp{_i_-1} then changes{_i_}='Same';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if cmp{_i_} &amp;gt; cmp{_i_-1} then changes{_i_}='Added';&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else changes{_i_}='Removed';&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;The %put statement is only there to give you a feel for what you are getting with macro language.&amp;nbsp; And you will have an extra "change" variable in your data set, since there is no way to assign the change that takes place in the first week.&amp;nbsp; (It could be dropped, but that part would be more complex.)&amp;nbsp; The program is easily maintained, since there is no maintenance.&amp;nbsp; Just change the SAS data set holding the weeks and the program adjusts automatically.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Aug 2014 02:44:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175078#M33634</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2014-08-26T02:44:30Z</dc:date>
    </item>
    <item>
      <title>Re: Compare multiple columns in macro - arrays in macros?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175079#M33635</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you for your help, this worked perfectly.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Aug 2014 14:04:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Compare-multiple-columns-in-macro-arrays-in-macros/m-p/175079#M33635</guid>
      <dc:creator>DangIT</dc:creator>
      <dc:date>2014-08-26T14:04:53Z</dc:date>
    </item>
  </channel>
</rss>

