<?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: Count number of matches with different rows on multiple criteria in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/937555#M368390</link>
    <description>&lt;P&gt;Your data appear to be already grouped by companyid and degreetype.&amp;nbsp; If so, then:&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 DirectorID	CompanyID	AwardYear	DegreeType :$9.;
cards;
1928993	62323	1998	Undergrad
1798822	62360	1998	Undergrad
2384193	467713	2003	Other
1769649	467713	2003	Other
1777732	1519459	2002	Undergrad
1627886	1519459	2003	Undergrad
1323941	1519459	2004	Undergrad
1839100	60212	2008	Grad
1706497	60212	2008	Undergrad
;



data want;
  array awdcount{1990:2010} _temporary_;
  call missing(of awdcount{*});

  do until (last.degreetype);
    set have;
    by companyid degreetype notsorted;
    awdcount{awardyear}+1;
  end;

  do until (last.degreetype);
    set have;
    by companyid degreetype notsorted;
    nmatch=sum(awdcount{awardyear-1},awdcount{awardyear},awdcount{awardyear+1})-1;
    output;
  end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Tue, 30 Jul 2024 04:24:57 GMT</pubDate>
    <dc:creator>mkeintz</dc:creator>
    <dc:date>2024-07-30T04:24:57Z</dc:date>
    <item>
      <title>Count number of matches with different rows on multiple criteria</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/937354#M368310</link>
      <description>&lt;P&gt;I HAVE the following data:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;DirectorID&lt;/TD&gt;&lt;TD&gt;CompanyID&lt;/TD&gt;&lt;TD&gt;AwardYear&lt;/TD&gt;&lt;TD&gt;DegreeType&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1928993&lt;/TD&gt;&lt;TD&gt;62323&lt;/TD&gt;&lt;TD&gt;1998&lt;/TD&gt;&lt;TD&gt;Undegrad&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1798822&lt;/TD&gt;&lt;TD&gt;62360&lt;/TD&gt;&lt;TD&gt;1998&lt;/TD&gt;&lt;TD&gt;Undegrad&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2384193&lt;/TD&gt;&lt;TD&gt;467713&lt;/TD&gt;&lt;TD&gt;2003&lt;/TD&gt;&lt;TD&gt;Other&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1769649&lt;/TD&gt;&lt;TD&gt;467713&lt;/TD&gt;&lt;TD&gt;2003&lt;/TD&gt;&lt;TD&gt;Other&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1777732&lt;/TD&gt;&lt;TD&gt;1519459&lt;/TD&gt;&lt;TD&gt;2002&lt;/TD&gt;&lt;TD&gt;Undegrad&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1627886&lt;/TD&gt;&lt;TD&gt;1519459&lt;/TD&gt;&lt;TD&gt;2003&lt;/TD&gt;&lt;TD&gt;Undegrad&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1323941&lt;/TD&gt;&lt;TD&gt;1519459&lt;/TD&gt;&lt;TD&gt;2004&lt;/TD&gt;&lt;TD&gt;Undergrad&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1839100&lt;/TD&gt;&lt;TD&gt;60212&lt;/TD&gt;&lt;TD&gt;2008&lt;/TD&gt;&lt;TD&gt;Grad&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1706497&lt;/TD&gt;&lt;TD&gt;60212&lt;/TD&gt;&lt;TD&gt;2008&lt;/TD&gt;&lt;TD&gt;Undergrad&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 count the number of unique rows (Matches) where a DirectorID matches with another DirectorID on ALL of the following criteria: (1) CompanyId, (2) within +/- one year of AwardYear, and (3) DegreeType.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The following output is what I WANT:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;DirectorID&lt;/TD&gt;&lt;TD&gt;CompanyID&lt;/TD&gt;&lt;TD&gt;AwardYear&lt;/TD&gt;&lt;TD&gt;DegreeType&lt;/TD&gt;&lt;TD&gt;Matches&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1928993&lt;/TD&gt;&lt;TD&gt;62323&lt;/TD&gt;&lt;TD&gt;1998&lt;/TD&gt;&lt;TD&gt;Undegrad&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1798822&lt;/TD&gt;&lt;TD&gt;62360&lt;/TD&gt;&lt;TD&gt;1998&lt;/TD&gt;&lt;TD&gt;Undegrad&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2384193&lt;/TD&gt;&lt;TD&gt;467713&lt;/TD&gt;&lt;TD&gt;2003&lt;/TD&gt;&lt;TD&gt;Other&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1769649&lt;/TD&gt;&lt;TD&gt;467713&lt;/TD&gt;&lt;TD&gt;2003&lt;/TD&gt;&lt;TD&gt;Other&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1777732&lt;/TD&gt;&lt;TD&gt;1519459&lt;/TD&gt;&lt;TD&gt;2002&lt;/TD&gt;&lt;TD&gt;Undegrad&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1627886&lt;/TD&gt;&lt;TD&gt;1519459&lt;/TD&gt;&lt;TD&gt;2003&lt;/TD&gt;&lt;TD&gt;Undegrad&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1323941&lt;/TD&gt;&lt;TD&gt;1519459&lt;/TD&gt;&lt;TD&gt;2004&lt;/TD&gt;&lt;TD&gt;Undergrad&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1839100&lt;/TD&gt;&lt;TD&gt;60212&lt;/TD&gt;&lt;TD&gt;2008&lt;/TD&gt;&lt;TD&gt;Grad&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1706497&lt;/TD&gt;&lt;TD&gt;60212&lt;/TD&gt;&lt;TD&gt;2008&lt;/TD&gt;&lt;TD&gt;Undergrad&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What code could be used to create the "Matches" variable?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you!!&lt;/P&gt;</description>
      <pubDate>Sat, 27 Jul 2024 17:31:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/937354#M368310</guid>
      <dc:creator>teamlinerek</dc:creator>
      <dc:date>2024-07-27T17:31:18Z</dc:date>
    </item>
    <item>
      <title>Re: Count number of matches with different rows on multiple criteria</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/937364#M368314</link>
      <description>&lt;P&gt;If you do not have a big table ,try PROC SQL.&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 DirectorID	CompanyID	AwardYear	DegreeType $;
cards;
1928993	62323	1998	Undegrad
1798822	62360	1998	Undegrad
2384193	467713	2003	Other
1769649	467713	2003	Other
1777732	1519459	2002	Undegrad
1627886	1519459	2003	Undegrad
1323941	1519459	2004	Undegrad
1839100	60212	2008	Grad
1706497	60212	2008	Undergrad
;
proc sql;
create table want as
select a.*,count(b.DirectorID) as Matches
 from have as a left join have as b
  on a.CompanyID=b.CompanyID and a.AwardYear between b.AwardYear-1 and b.AwardYear+1 
   and a.DegreeType=b.DegreeType and a.DirectorID ne b.DirectorID
     group by a.DirectorID,a.CompanyID,a.AwardYear,a.DegreeType;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 28 Jul 2024 01:37:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/937364#M368314</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2024-07-28T01:37:45Z</dc:date>
    </item>
    <item>
      <title>Re: Count number of matches with different rows on multiple criteria</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/937555#M368390</link>
      <description>&lt;P&gt;Your data appear to be already grouped by companyid and degreetype.&amp;nbsp; If so, then:&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 DirectorID	CompanyID	AwardYear	DegreeType :$9.;
cards;
1928993	62323	1998	Undergrad
1798822	62360	1998	Undergrad
2384193	467713	2003	Other
1769649	467713	2003	Other
1777732	1519459	2002	Undergrad
1627886	1519459	2003	Undergrad
1323941	1519459	2004	Undergrad
1839100	60212	2008	Grad
1706497	60212	2008	Undergrad
;



data want;
  array awdcount{1990:2010} _temporary_;
  call missing(of awdcount{*});

  do until (last.degreetype);
    set have;
    by companyid degreetype notsorted;
    awdcount{awardyear}+1;
  end;

  do until (last.degreetype);
    set have;
    by companyid degreetype notsorted;
    nmatch=sum(awdcount{awardyear-1},awdcount{awardyear},awdcount{awardyear+1})-1;
    output;
  end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 30 Jul 2024 04:24:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/937555#M368390</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2024-07-30T04:24:57Z</dc:date>
    </item>
    <item>
      <title>Re: Count number of matches with different rows on multiple criteria</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/938012#M368498</link>
      <description>Thank you!&lt;BR /&gt;&lt;BR /&gt;Do you have any alternate suggestions if the number of observations is too big (more than 3,000,000)?</description>
      <pubDate>Thu, 01 Aug 2024 20:35:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/938012#M368498</guid>
      <dc:creator>teamlinerek</dc:creator>
      <dc:date>2024-08-01T20:35:08Z</dc:date>
    </item>
    <item>
      <title>Re: Count number of matches with different rows on multiple criteria</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/938037#M368512</link>
      <description>&lt;P&gt;If your computer has the big memory ,try hash table :&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 DirectorID	CompanyID	AwardYear	DegreeType $;
cards;
1928993	62323	1998	Undegrad
1798822	62360	1998	Undegrad
2384193	467713	2003	Other
1769649	467713	2003	Other
1777732	1519459	2002	Undegrad
1627886	1519459	2003	Undegrad
1323941	1519459	2004	Undegrad
1839100	60212	2008	Grad
1706497	60212	2008	Undergrad
;
data want;
if _n_=1 then do;
 if 0 then set have(rename=(DirectorID=_DirectorID));
 declare hash h(dataset:' have(rename=(DirectorID=_DirectorID))',multidata:'y',hashexp:20);
 h.definekey('CompanyID','AwardYear','DegreeType');
 h.definedata('_DirectorID');
 h.definedone();
end;
set have;
Matches=0;
do i=AwardYear-1 to AwardYear+1;
  rc=h.find(key:CompanyID,key:i,key:DegreeType);
  do while(rc=0);
    if DirectorID ne _DirectorID then Matches+1;
    rc=h.find_next(key:CompanyID,key:i,key:DegreeType);
  end;
end;
drop i rc _DirectorID;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 02 Aug 2024 01:14:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-number-of-matches-with-different-rows-on-multiple-criteria/m-p/938037#M368512</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2024-08-02T01:14:04Z</dc:date>
    </item>
  </channel>
</rss>

