<?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: Debugging a duplicate in a merge in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563512#M157992</link>
    <description>&lt;P&gt;I guess because you have a set and a merge statement. Since your code is extremely hard to read because of all the shouting and no visual formatting, it's just a guess.&lt;/P&gt;</description>
    <pubDate>Tue, 04 Jun 2019 13:20:56 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2019-06-04T13:20:56Z</dc:date>
    <item>
      <title>Debugging a duplicate in a merge</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563500#M157988</link>
      <description>&lt;P&gt;I'm getting a single instance of duplication in a DATA step that I cannot figure out.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Input data:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PatID&lt;/TD&gt;&lt;TD&gt;FromDate&lt;/TD&gt;&lt;TD&gt;ThruDate&lt;/TD&gt;&lt;TD&gt;ProvID&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3/3/2017&lt;/TD&gt;&lt;TD&gt;3/3/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3/6/2017&lt;/TD&gt;&lt;TD&gt;3/6/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3/7/2017&lt;/TD&gt;&lt;TD&gt;3/7/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3/8/2017&lt;/TD&gt;&lt;TD&gt;3/8/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3/9/2017&lt;/TD&gt;&lt;TD&gt;3/9/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3/10/2017&lt;/TD&gt;&lt;TD&gt;3/10/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/8/2017&lt;/TD&gt;&lt;TD&gt;5/8/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/9/2017&lt;/TD&gt;&lt;TD&gt;5/9/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/10/2017&lt;/TD&gt;&lt;TD&gt;5/10/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/11/2017&lt;/TD&gt;&lt;TD&gt;5/11/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/12/2017&lt;/TD&gt;&lt;TD&gt;5/12/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/15/2017&lt;/TD&gt;&lt;TD&gt;5/15/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;6/27/2017&lt;/TD&gt;&lt;TD&gt;6/27/2017&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Code:&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="3"&gt;&lt;STRONG&gt;DATA&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; STEP2; &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;KEEP&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; PATID FromDate_NEW ThruDate ProvID;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;RENAME&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; FromDate_NEW = FromDate;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;SET&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; STEP1;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;BY&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; PATID ProvID;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;MERGE&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; STEP1&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;STEP1 (&lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;FIRSTOBS&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;2&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="Courier New" size="3"&gt;KEEP&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;=FromDate &lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;RENAME&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;=(FromDate=_NEXT_FROM));&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;RETAIN&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; FromDate_NEW ThruDate_LAST;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;FORMAT&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; FromDate_NEW &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;MMDDYY10.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;ThruDate_LAST &lt;/FONT&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;MMDDYY10.&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;IF&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; FIRST.PATID &lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;or&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; first.ProvID &lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;THEN&lt;/FONT&gt; &lt;FONT color="#0000ff" face="Courier New" size="3"&gt;DO&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;ThruDate_LAST = &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;FromDate_NEW=FromDate;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;END&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;ELSE&lt;/FONT&gt; &lt;FONT color="#0000ff" face="Courier New" size="3"&gt;DO&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;IF&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; FromDate - ThruDate_LAST &amp;gt; &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;2&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="Courier New" size="3"&gt;THEN&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; FromDate_NEW = FromDate;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;END&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ThruDate_LAST=ThruDate;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;IF&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; LAST.PATID &lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;or&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; last.ProvID &lt;/FONT&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;THEN&lt;/FONT&gt; &lt;FONT color="#0000ff" face="Courier New" size="3"&gt;OUTPUT&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;if&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; LAST.PATID=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="Courier New" size="3"&gt;AND&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; _next_from - ThruDate &amp;gt; &lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;2&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="Courier New" size="3"&gt;THEN&lt;/FONT&gt; &lt;FONT color="#0000ff" face="Courier New" size="3"&gt;OUTPUT&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="3"&gt;&lt;STRONG&gt;RUN&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Output:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PatID&lt;/TD&gt;&lt;TD&gt;ThruDate&lt;/TD&gt;&lt;TD&gt;ProvID&lt;/TD&gt;&lt;TD&gt;FromDate&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3/3/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;TD&gt;3/3/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3/10/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;TD&gt;3/6/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/12/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;TD&gt;5/8/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/15/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;TD&gt;5/15/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/15/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;TD&gt;5/15/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;6/27/2017&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;6/27/2017&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Desired output:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PatID&lt;/TD&gt;&lt;TD&gt;ThruDate&lt;/TD&gt;&lt;TD&gt;ProvID&lt;/TD&gt;&lt;TD&gt;FromDate&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3/3/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;TD&gt;3/3/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;3/10/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;TD&gt;3/6/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/12/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;TD&gt;5/8/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;5/15/2017&lt;/TD&gt;&lt;TD&gt;222&lt;/TD&gt;&lt;TD&gt;5/15/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1000&lt;/TD&gt;&lt;TD&gt;6/27/2017&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;TD&gt;6/27/2017&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any idea why I'm getting duplication when FromDate = 5/15/17 and ProvID = 222?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Tue, 04 Jun 2019 12:46:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563500#M157988</guid>
      <dc:creator>rlafond</dc:creator>
      <dc:date>2019-06-04T12:46:27Z</dc:date>
    </item>
    <item>
      <title>Re: Debugging a duplicate in a merge</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563512#M157992</link>
      <description>&lt;P&gt;I guess because you have a set and a merge statement. Since your code is extremely hard to read because of all the shouting and no visual formatting, it's just a guess.&lt;/P&gt;</description>
      <pubDate>Tue, 04 Jun 2019 13:20:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563512#M157992</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-06-04T13:20:56Z</dc:date>
    </item>
    <item>
      <title>Re: Debugging a duplicate in a merge</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563526#M157993</link>
      <description>&lt;P&gt;I can tell you the cause, but only you can figure out the solution.&amp;nbsp; You're the one who knows what the program is supposed to do.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You have two OUTPUT statements.&amp;nbsp; and you have an observation (the one that repeats an extra time) that meets the IF conditions for both OUTPUT statements.&amp;nbsp; So it gets output twice.&amp;nbsp; It's up to you to change the logic about when to output.&amp;nbsp; It might be as simple as adding the word ELSE after the first OUTPUT statement, or it might be more complex than that.&lt;/P&gt;</description>
      <pubDate>Tue, 04 Jun 2019 14:02:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563526#M157993</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2019-06-04T14:02:51Z</dc:date>
    </item>
    <item>
      <title>Re: Debugging a duplicate in a merge</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563529#M157996</link>
      <description>This was helpful, thanks. I thought the vector cleared and the code started over after the first output. ELSE solved it.</description>
      <pubDate>Tue, 04 Jun 2019 14:06:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563529#M157996</guid>
      <dc:creator>rlafond</dc:creator>
      <dc:date>2019-06-04T14:06:30Z</dc:date>
    </item>
    <item>
      <title>Re: Debugging a duplicate in a merge</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563569#M158005</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/183090"&gt;@rlafond&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;This was helpful, thanks. I thought the vector cleared and the code started over after the first output. ELSE solved it.&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;OUTPUT is executable. Which means each time the instruction is encountered it executes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is intentional behavior as you can specify a specific output put data set as an argument to the statement (assuming the data set name appears on the DATA statement) to direct observations as needed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Consider as an example:&lt;/P&gt;
&lt;PRE&gt;data work.boys work.girls work.older;
   set sashelp.class;
   if sex='F' then output work.girls;
   if sex='M' then output work.boys;
   if age ge 14 then output work.older;
run;&lt;/PRE&gt;
&lt;P&gt;I will not say that splitting the data is the best option but it is one.&lt;/P&gt;</description>
      <pubDate>Tue, 04 Jun 2019 17:31:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Debugging-a-duplicate-in-a-merge/m-p/563569#M158005</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2019-06-04T17:31:54Z</dc:date>
    </item>
  </channel>
</rss>

