<?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 Observations Meeting Criteria Compared To Each Observation in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/734444#M228803</link>
    <description>&lt;P&gt;My 2 cents. Should be reasonably fast as well.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input h f x y t;
datalines;
0 1 -113.219 37.18241 20239
1 0 -113.751 37.73728 20404
1 0 -113.124 37.69568 20428
0 1 -113.862 37.70729 20194
1 0 -113.373 37.14169 20200
1 0 -113.485 37.52134 20724
1 0 -114.051 36.89753 20395
1 0 -113.666 37.45601 20410
1 0 -113.421 36.86348 20511
1 1 -113.59  37.08619 20652
1 1 -113.904 37.40063 20098
0 0 -113.997 37.13753 20050
0 0 -113.458 37.27519 20590
0 0 -113.457 37.45815 20403
0 0 -113.732 37.14784 20252
0 1 -113.673 37.03961 20818
1 1 -113.861 37.75376 20859
0 0 -113.793 36.85021 20730
1 0 -113.488 37.4593  20451
1 0 -113.415 37.26769 20074
;

data want(drop = xx yy tt);
   if _N_ = 1 then do;
      dcl hash hh(dataset : "have(rename = (x = xx y = yy t = tt) where = (f = 1))");
      hh.definekey("h");
      hh.definedata("xx", "yy", "tt");
      hh.definedone();
      dcl hiter i("hh");
   end;

   set have;
   xx = .; yy = .; tt = .; c = 0;

   do while (i.next() = 0);
      if 0 &amp;lt; geodist(y, x, yy, xx, 'm') &amp;lt; 1 &amp;amp; abs(t - tt) &amp;lt; 30 then c + 1;
   end;

run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 15 Apr 2021 19:32:22 GMT</pubDate>
    <dc:creator>PeterClemmensen</dc:creator>
    <dc:date>2021-04-15T19:32:22Z</dc:date>
    <item>
      <title>Count Number of Observations Meeting Criteria Compared To Each Observation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/733535#M228555</link>
      <description>&lt;P&gt;I am no sure how to describe this, but I have a data set of home sales including foreclosures. I want to count the number of foreclosures near each observation based on distance and time as well as if the foreclosure meets one other, dummy criteria.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Below is the data.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;h is a dummy variable for quality&lt;/P&gt;&lt;P&gt;f is a dummy variable for foreclosure sale&lt;/P&gt;&lt;P&gt;X and Y are lat/long.&lt;/P&gt;&lt;P&gt;t is the month the foreclosure sale&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Count all the&amp;nbsp;&lt;EM&gt;other&lt;/EM&gt; observations that meet these critera:&lt;/P&gt;&lt;P&gt;Within&amp;nbsp; distance: say 1 mile (I know how to use GEODIST to find this)&lt;/P&gt;&lt;P&gt;Within time: say 30 days so abs(t_subject - t_obs) &amp;lt; 30)&lt;/P&gt;&lt;P&gt;Where f=1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I also want to split this count between obs where h=0 and h=1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So for the first datapoint. I want to find all other datapoints that are within 1 mile of&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;-113.219&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;37.18241&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;And within 30 days of 20239 or 20209 to 20269&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Where f=1.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want a count for when h=0 and h=1.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here's the data:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;h&lt;/TD&gt;&lt;TD&gt;f&lt;/TD&gt;&lt;TD&gt;x&lt;/TD&gt;&lt;TD&gt;y&lt;/TD&gt;&lt;TD&gt;t&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;-113.219&lt;/TD&gt;&lt;TD&gt;37.18241&lt;/TD&gt;&lt;TD&gt;20239&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.751&lt;/TD&gt;&lt;TD&gt;37.73728&lt;/TD&gt;&lt;TD&gt;20404&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.124&lt;/TD&gt;&lt;TD&gt;37.69568&lt;/TD&gt;&lt;TD&gt;20428&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;-113.862&lt;/TD&gt;&lt;TD&gt;37.70729&lt;/TD&gt;&lt;TD&gt;20194&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.373&lt;/TD&gt;&lt;TD&gt;37.14169&lt;/TD&gt;&lt;TD&gt;20200&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.485&lt;/TD&gt;&lt;TD&gt;37.52134&lt;/TD&gt;&lt;TD&gt;20724&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-114.051&lt;/TD&gt;&lt;TD&gt;36.89753&lt;/TD&gt;&lt;TD&gt;20395&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.666&lt;/TD&gt;&lt;TD&gt;37.45601&lt;/TD&gt;&lt;TD&gt;20410&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.421&lt;/TD&gt;&lt;TD&gt;36.86348&lt;/TD&gt;&lt;TD&gt;20511&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;-113.59&lt;/TD&gt;&lt;TD&gt;37.08619&lt;/TD&gt;&lt;TD&gt;20652&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;-113.904&lt;/TD&gt;&lt;TD&gt;37.40063&lt;/TD&gt;&lt;TD&gt;20098&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.997&lt;/TD&gt;&lt;TD&gt;37.13753&lt;/TD&gt;&lt;TD&gt;20050&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.458&lt;/TD&gt;&lt;TD&gt;37.27519&lt;/TD&gt;&lt;TD&gt;20590&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.457&lt;/TD&gt;&lt;TD&gt;37.45815&lt;/TD&gt;&lt;TD&gt;20403&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.732&lt;/TD&gt;&lt;TD&gt;37.14784&lt;/TD&gt;&lt;TD&gt;20252&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;-113.673&lt;/TD&gt;&lt;TD&gt;37.03961&lt;/TD&gt;&lt;TD&gt;20818&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;-113.861&lt;/TD&gt;&lt;TD&gt;37.75376&lt;/TD&gt;&lt;TD&gt;20859&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.793&lt;/TD&gt;&lt;TD&gt;36.85021&lt;/TD&gt;&lt;TD&gt;20730&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.488&lt;/TD&gt;&lt;TD&gt;37.4593&lt;/TD&gt;&lt;TD&gt;20451&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;-113.415&lt;/TD&gt;&lt;TD&gt;37.26769&lt;/TD&gt;&lt;TD&gt;20074&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Tue, 13 Apr 2021 21:06:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/733535#M228555</guid>
      <dc:creator>uwabe3</dc:creator>
      <dc:date>2021-04-13T21:06:04Z</dc:date>
    </item>
    <item>
      <title>Re: Count Number of Observations Meeting Criteria Compared To Each Observation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/733540#M228556</link>
      <description>&lt;P&gt;If that's the entire data set, 20-30 observations, I would use a Cartesian join to get all possible combinations in a data set and then do the 1 miles and 30 days comparison on this data set. I would also add some sort of ID variable to each row, it could be as simple as sequence number.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;UNTESTED CODE&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
     create table cartesian as select a.id,a.h,a.f,a.x,a.y,a.t,
         b.id as id2,b.h as h2,b.f as f2,b.x as x2,b.y as y2,b.t as t2
      from have as a,have as b
      order by a.id,b.id;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now if you really have thousands of records, this probably won't work because maybe your computer can't handle this large problem, or is going to take a long time.&lt;/P&gt;</description>
      <pubDate>Tue, 13 Apr 2021 21:18:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/733540#M228556</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2021-04-13T21:18:17Z</dc:date>
    </item>
    <item>
      <title>Re: Count Number of Observations Meeting Criteria Compared To Each Observation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/733541#M228557</link>
      <description>&lt;P&gt;Yes, I actually have 250k observations. I have used the Cartesian join and other methods, but they all consume days worth of resources. I am trying to find an easier solution. I was wondering if there was a solution with do loops.&lt;/P&gt;</description>
      <pubDate>Tue, 13 Apr 2021 21:29:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/733541#M228557</guid>
      <dc:creator>uwabe3</dc:creator>
      <dc:date>2021-04-13T21:29:47Z</dc:date>
    </item>
    <item>
      <title>Re: Count Number of Observations Meeting Criteria Compared To Each Observation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/733543#M228558</link>
      <description>&lt;P&gt;Well, there are methods that &lt;EM&gt;might&lt;/EM&gt; work when you have 250k observations, such as a double-do loop, and hash objects, but I will leave that type of programming up to others.&lt;/P&gt;</description>
      <pubDate>Tue, 13 Apr 2021 21:36:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/733543#M228558</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2021-04-13T21:36:28Z</dc:date>
    </item>
    <item>
      <title>Re: Count Number of Observations Meeting Criteria Compared To Each Observation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/734444#M228803</link>
      <description>&lt;P&gt;My 2 cents. Should be reasonably fast as well.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input h f x y t;
datalines;
0 1 -113.219 37.18241 20239
1 0 -113.751 37.73728 20404
1 0 -113.124 37.69568 20428
0 1 -113.862 37.70729 20194
1 0 -113.373 37.14169 20200
1 0 -113.485 37.52134 20724
1 0 -114.051 36.89753 20395
1 0 -113.666 37.45601 20410
1 0 -113.421 36.86348 20511
1 1 -113.59  37.08619 20652
1 1 -113.904 37.40063 20098
0 0 -113.997 37.13753 20050
0 0 -113.458 37.27519 20590
0 0 -113.457 37.45815 20403
0 0 -113.732 37.14784 20252
0 1 -113.673 37.03961 20818
1 1 -113.861 37.75376 20859
0 0 -113.793 36.85021 20730
1 0 -113.488 37.4593  20451
1 0 -113.415 37.26769 20074
;

data want(drop = xx yy tt);
   if _N_ = 1 then do;
      dcl hash hh(dataset : "have(rename = (x = xx y = yy t = tt) where = (f = 1))");
      hh.definekey("h");
      hh.definedata("xx", "yy", "tt");
      hh.definedone();
      dcl hiter i("hh");
   end;

   set have;
   xx = .; yy = .; tt = .; c = 0;

   do while (i.next() = 0);
      if 0 &amp;lt; geodist(y, x, yy, xx, 'm') &amp;lt; 1 &amp;amp; abs(t - tt) &amp;lt; 30 then c + 1;
   end;

run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 15 Apr 2021 19:32:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Count-Number-of-Observations-Meeting-Criteria-Compared-To-Each/m-p/734444#M228803</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2021-04-15T19:32:22Z</dc:date>
    </item>
  </channel>
</rss>

