<?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: Flagging Duplicates across multiple Rows in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318458#M69769</link>
    <description>&lt;P&gt;Hi Reeza&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for the feedback. Highly appreciate&amp;nbsp;it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You are correct; &amp;nbsp;records 4/5 should be flagged as well; indeed an error on my end.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The data is large ~ 500 million records spanning over two years.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have also looked at the possibility of using other variables however &amp;nbsp;I could not identify any. I&amp;nbsp;also chatted to our IT teams around how the data is being generated in the core systems and I have not been able to identify any possible work around using the existing variables.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
    <pubDate>Tue, 13 Dec 2016 05:42:03 GMT</pubDate>
    <dc:creator>atishp</dc:creator>
    <dc:date>2016-12-13T05:42:03Z</dc:date>
    <item>
      <title>Flagging Duplicates across multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318193#M69695</link>
      <description>&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to loop through a file and flag all&amp;nbsp;accounts that meet a specific criteria.&lt;/P&gt;&lt;P&gt;I want to to set the flag value to 1 on records that have same customer numbers, account numbers, date and opposite amounts.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What I want to do is:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Check the number of records that have the same customer number and date &amp;nbsp;and assign value k (&lt;EM&gt;&lt;STRONG&gt;I have this part working&lt;/STRONG&gt;&lt;/EM&gt;)&lt;/LI&gt;&lt;LI&gt;For each cluster of customer number&amp;nbsp;and date flag accounts with the opposite amount values&lt;/LI&gt;&lt;LI&gt;Once it has completed a cluster it should move onto the next set of records&lt;/LI&gt;&lt;LI&gt;There is no point in comparing across clusters&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data and result I am aiming for: (create new variable &lt;U&gt;&lt;STRONG&gt;flag&lt;/STRONG&gt;&lt;/U&gt;)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Customer Number&lt;/TD&gt;&lt;TD&gt;Account Number&lt;/TD&gt;&lt;TD&gt;Date&lt;/TD&gt;&lt;TD&gt;Amount&lt;/TD&gt;&lt;TD&gt;k&lt;/TD&gt;&lt;TD&gt;Flag&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/03&lt;/TD&gt;&lt;TD&gt;550&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;-199&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Clustering&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc002&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;199&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;3850&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc003&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;-3850&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;-15776.75&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;999.23&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc003&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;15776.75&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/26&lt;/TD&gt;&lt;TD&gt;-10000&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/29&lt;/TD&gt;&lt;TD&gt;4400&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;Clustering&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/29&lt;/TD&gt;&lt;TD&gt;-8500&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/30&lt;/TD&gt;&lt;TD&gt;-1500&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc002&lt;/TD&gt;&lt;TD&gt;2015/06/30&lt;/TD&gt;&lt;TD&gt;1500&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C002&lt;/TD&gt;&lt;TD&gt;Various Account Number&lt;/TD&gt;&lt;TD&gt;Various Dates&lt;/TD&gt;&lt;TD&gt;xxx&lt;/TD&gt;&lt;TD&gt;x&lt;/TD&gt;&lt;TD&gt;xx&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C003&lt;/TD&gt;&lt;TD&gt;Various Account Number&lt;/TD&gt;&lt;TD&gt;Various Dates&lt;/TD&gt;&lt;TD&gt;xxx&lt;/TD&gt;&lt;TD&gt;x&lt;/TD&gt;&lt;TD&gt;xx&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;I have built the following code logic:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;/* Macro to SCAN through DATALOG */									
%MACRO SCANLOOP(SCANFILE,FIELD1,FIELD2, FIELD3, FIELD4, FIELD5);									
/* First obtain the number of records in DATALOG */									
									
DATA _NULL_;									
	IF 0 THEN SET &amp;amp;SCANFILE NOBS=X;								
	CALL SYMPUTX('RECCOUNT',X);								
	%put &amp;amp;RECCOUNT.;								
STOP;									
RUN;									
									
/* loop from one to number of records */									
/*%DO I=1 %TO &amp;amp;RECCOUNT;*/									
%DO I=1 %TO 100;									
									
DATA _NULL_;									
	/* Advance to the Ith record */								
	SET &amp;amp;SCANFILE (FIRSTOBS=&amp;amp;I);								
	/* store the variables of interest in */								
	/* macro variables */								
/*	Symput is for characters*/								
/*	symputx is for numeric to character conversion with removal*/								
/*	of leading and trailing spaces*/								
	CALL SYMPUT('VAR1',&amp;amp;FIELD1);								
	CALL SYMPUTX('VAR2',&amp;amp;FIELD2);								
	CALL SYMPUTX('VAR3',&amp;amp;FIELD3);								
	CALL SYMPUTX('VAR4',&amp;amp;FIELD4);								
	CALL SYMPUTX('VAR5',&amp;amp;FIELD5);								
	CALL SYMPUTX('VAR6',k);								
									
									
	%put &amp;amp;VAR1. &amp;amp;VAR2. &amp;amp;VAR3. &amp;amp;VAR4. &amp;amp;VAR5. &amp;amp;VAR6.;								
									
									
STOP;									
RUN;									
									
	/* now perform the tasks that */								
	/* wish repeated for each */								
	/* observation */								
									
/*SETUP a blank file */									
/*DATA RECON5;*/									
/*	if &amp;amp;i=0 then SET recon4 (OBS=0);*/								
/*run;*/									
									
									
DATA recon5;									
	SET recon5 recon4;								
									
	IF Narrative ^= 'DAILY BALANCE'								
		AND customer_number = symget('VAR2')							
			AND date = symget('VAR3')						
				AND account_number NOT = symget('VAR4')					
					AND amount = -(symget('VAR5')) THEN DO;				
						flag=1;			
						output recon5; 			
					END;				
						ELSE flag=0;			
									
									
									
/*input(original_variable, informat.)*/									
									
									
%END;									
%MEND SCANLOOP;									
/* Call SCANLOOP */									
/*%SCANLOOP(DATALOG,FILENM,DESC);*/									
%SCANLOOP(recon4,narrative,customer_number,date,account_number,amount);									
RUN;									&lt;/PRE&gt;&lt;OL&gt;&lt;LI&gt;&amp;nbsp;The current issues with the code is that it does not write the results to a single consolidated file&lt;/LI&gt;&lt;LI&gt;It has no idea on how to use k&lt;UL&gt;&lt;LI&gt;K is counts the number of records belonging to a customer with the same date&lt;/LI&gt;&lt;LI&gt;Ideally the logic should use this and help reduce time to process records, by jumping across records&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 12 Dec 2016 04:03:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318193#M69695</guid>
      <dc:creator>atishp</dc:creator>
      <dc:date>2016-12-12T04:03:31Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging Duplicates across multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318208#M69699</link>
      <description>&lt;P&gt;Shouldn't records 4/5 be flagged as well?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edit: How big is the data you're working with, number of rows?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Second, have you fully explored the variables and data available. Typically when a record os reversed or a return is processed there some ID that's unique to those records to allow for matching, besides the amount. Sometimes it's a transaction ID or just an indicator on the field status.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You could consider reversing the sign on the returns but adding a field that identifies returns, a return flag. Then you could leverage BY group logic to identify you returned purchases since the amounts are the same, but they'll have different return flags.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 12 Dec 2016 06:24:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318208#M69699</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-12-12T06:24:09Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging Duplicates across multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318240#M69704</link>
      <description>&lt;P&gt;you need to watch out the decimal part, maybe consider to use function ROUND().&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs truncover;
input CustomerNumber $	AccountNumber $ Date : yymmdd10. Amount	k;
format date yymmdd10.;
cards; 
C001	Acc001	2015/06/03	550	1	0	 
C001	Acc001	2015/06/08	-199	7	1	Clustering
C001	Acc002	2015/06/08	199	7	1
C001	Acc001	2015/06/08	3850	7	0
C001	Acc003	2015/06/08	-3850	7	0
C001	Acc001	2015/06/08	-15776.75	7	1
C001	Acc001	2015/06/08	999.23	7	0
C001	Acc003	2015/06/08	15776.75	7	1
C001	Acc001	2015/06/26	-10000	1	0	 
C001	Acc001	2015/06/29	4400	2	0	Clustering
C001	Acc001	2015/06/29	-8500	2	0
C001	Acc001	2015/06/30	-1500	2	1
C001	Acc002	2015/06/30	1500	2
;
run;
data temp;
 set have;
 by k notsorted;
 group+first.k;
 abs=abs(amount);
run;
proc sort data=temp;by group abs;run;
data want;
 set temp;
 by group abs notsorted;
 if first.abs and last.abs then flag=0;
  else flag=1;
drop group abs;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 12 Dec 2016 10:35:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318240#M69704</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-12-12T10:35:26Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging Duplicates across multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318458#M69769</link>
      <description>&lt;P&gt;Hi Reeza&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for the feedback. Highly appreciate&amp;nbsp;it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You are correct; &amp;nbsp;records 4/5 should be flagged as well; indeed an error on my end.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The data is large ~ 500 million records spanning over two years.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have also looked at the possibility of using other variables however &amp;nbsp;I could not identify any. I&amp;nbsp;also chatted to our IT teams around how the data is being generated in the core systems and I have not been able to identify any possible work around using the existing variables.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Tue, 13 Dec 2016 05:42:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318458#M69769</guid>
      <dc:creator>atishp</dc:creator>
      <dc:date>2016-12-13T05:42:03Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging Duplicates across multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318465#M69773</link>
      <description>&lt;P&gt;Hi KSharp&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for the nifty code.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Works really great on the sample I provided&amp;nbsp;&lt;img id="catvery-happy" class="emoticon emoticon-catvery-happy" src="https://communities.sas.com/i/smilies/16x16_cat-very-happy.png" alt="Cat Very Happy" title="Cat Very Happy" /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have applied it against the full data set and noticed the following:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;On transcations that are occuring but not "transfers" they are being flagged as well&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;I have provided an updated record set to illustrate this specific issue.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Do you have any suggestions?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Customer Number&lt;/TD&gt;&lt;TD&gt;Account Number&lt;/TD&gt;&lt;TD&gt;Date&lt;/TD&gt;&lt;TD&gt;Amount&lt;/TD&gt;&lt;TD&gt;k&lt;/TD&gt;&lt;TD&gt;Flag_I_Want&lt;/TD&gt;&lt;TD&gt;Narrative&lt;/TD&gt;&lt;TD&gt;Current_Flag&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/03&lt;/TD&gt;&lt;TD&gt;550&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;-199&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Payment to acc002&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc002&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;199&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;McDonalds&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc002&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;199&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Receipt acc002&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc002&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;Toll Charge&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc002&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;Toll Charge&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;3850&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc003&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;-3850&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;-15776.75&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;999.23&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc003&lt;/TD&gt;&lt;TD&gt;2015/06/08&lt;/TD&gt;&lt;TD&gt;15776.75&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/26&lt;/TD&gt;&lt;TD&gt;-10000&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/29&lt;/TD&gt;&lt;TD&gt;4400&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/29&lt;/TD&gt;&lt;TD&gt;-8500&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc001&lt;/TD&gt;&lt;TD&gt;2015/06/30&lt;/TD&gt;&lt;TD&gt;-1500&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C001&lt;/TD&gt;&lt;TD&gt;Acc002&lt;/TD&gt;&lt;TD&gt;2015/06/30&lt;/TD&gt;&lt;TD&gt;1500&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C002&lt;/TD&gt;&lt;TD&gt;Various Account Number&lt;/TD&gt;&lt;TD&gt;Various Dates&lt;/TD&gt;&lt;TD&gt;xxx&lt;/TD&gt;&lt;TD&gt;x&lt;/TD&gt;&lt;TD&gt;xx&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C003&lt;/TD&gt;&lt;TD&gt;Various Account Number&lt;/TD&gt;&lt;TD&gt;Various Dates&lt;/TD&gt;&lt;TD&gt;xxx&lt;/TD&gt;&lt;TD&gt;x&lt;/TD&gt;&lt;TD&gt;xx&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Tue, 13 Dec 2016 06:24:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318465#M69773</guid>
      <dc:creator>atishp</dc:creator>
      <dc:date>2016-12-13T06:24:35Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging Duplicates across multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318467#M69775</link>
      <description>&lt;P&gt;Just to add another point the payment and receipt narratives are not generic; I have simplified it for illustration purposes.&lt;/P&gt;</description>
      <pubDate>Tue, 13 Dec 2016 06:28:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318467#M69775</guid>
      <dc:creator>atishp</dc:creator>
      <dc:date>2016-12-13T06:28:12Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging Duplicates across multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318492#M69788</link>
      <description>&lt;P&gt;I figured that if I just join the table to itself I can get the desired results as well.&lt;/P&gt;</description>
      <pubDate>Tue, 13 Dec 2016 08:52:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318492#M69788</guid>
      <dc:creator>atishp</dc:creator>
      <dc:date>2016-12-13T08:52:11Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging Duplicates across multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318494#M69790</link>
      <description>&lt;P&gt;That would be very complicated.&lt;/P&gt;
&lt;P&gt;You also need to consider whether the positive number is greater than negative number .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs truncover;
input CustomerNumber $	AccountNumber $ Date : yymmdd10. Amount	k;
format date yymmdd10.;
cards;
C001	Acc001	2015/06/03	550	1	0	 	0
C001	Acc001	2015/06/08	-199	7	1	Payment to acc002	1
C001	Acc002	2015/06/08	199	7	0	McDonalds	1
C001	Acc002	2015/06/08	199	7	1	Receipt acc002	1
C001	Acc002	2015/06/08	50	7	0	Toll Charge	1
C001	Acc002	2015/06/08	50	7	0	Toll Charge	1
C001	Acc001	2015/06/08	3850	7	1	 	1
C001	Acc003	2015/06/08	-3850	7	1	 	1
C001	Acc001	2015/06/08	-15776.75	7	1	 	1
C001	Acc001	2015/06/08	999.23	7	0	 	0
C001	Acc003	2015/06/08	15776.75	7	1	 	1
C001	Acc001	2015/06/26	-10000	1	0	 	0
C001	Acc001	2015/06/29	4400	2	0	 	0
C001	Acc001	2015/06/29	-8500	2	0	 	0
C001	Acc001	2015/06/30	-1500	2	1	 	1
C001	Acc002	2015/06/30	1500	2	1
;
run;
data temp;
 set have;
 by k notsorted;
 group+first.k;
 abs=abs(amount);
run;
proc sort data=temp;by group abs;run;
data positive negative(rename=(CustomerNumber=_c
AccountNumber=_ac Date=_d Amount=_am k=_k));
 set temp;
 if amount gt 0 then output positive;
  else output negative;
run;
data x;
 ina=0;inb=0;
 merge positive(in=ina) negative(in=inb);
 by group abs;
 one=ina;two=inb;
 output;
 call missing(of _all_);
run;

data want;
 set x;
 if one and not two then do;flag=0;output;end;
  else if not one and two then do;
   CustomerNumber=_c;
   AccountNumber=_ac;
   Date=_d;
   Amount=_am; 
   k=_k;
   flag=0;output;
  end;
  else do;
   flag=1;output;
   CustomerNumber=_c;
   AccountNumber=_ac;
   Date=_d;
   Amount=_am; 
   k=_k;
   output;
  end;
drop  group abs one two _:;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 13 Dec 2016 09:02:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318494#M69790</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-12-13T09:02:03Z</dc:date>
    </item>
    <item>
      <title>Re: Flagging Duplicates across multiple Rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318532#M69805</link>
      <description>&lt;P&gt;Thank again&lt;/P&gt;</description>
      <pubDate>Tue, 13 Dec 2016 12:03:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flagging-Duplicates-across-multiple-Rows/m-p/318532#M69805</guid>
      <dc:creator>atishp</dc:creator>
      <dc:date>2016-12-13T12:03:41Z</dc:date>
    </item>
  </channel>
</rss>

