<?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: Conditional Count in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141922#M296714</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am aware that Art's solution works (like it always does), here is another one using Hash.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input FL_DATE :yymmdd10. CARRIER :$2. (FL_NUM ORIGIN DEST) (:$4.) (crs_dep_time crs_arr_time min_connex_time max_connex_time) (:time5.);&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;2012-01-01 AA 2400 LAX DFW 0:20 5:05 6:05 10:05&lt;/P&gt;&lt;P&gt;2012-01-01 AA 2043 SFO DFW 0:25 5:35 6:35 10:35&lt;/P&gt;&lt;P&gt;2012-01-01 AA 2538 LAS ORD 0:45 6:15 7:15 11:15&lt;/P&gt;&lt;P&gt;2012-01-01 AA 2297 JFK MIA 5:35 8:45 9:45 13:45&lt;/P&gt;&lt;P&gt;2012-01-01 AA 1845 BOS MIA 5:40 9:15 10:15 14:15&lt;/P&gt;&lt;P&gt;2012-01-01 AA 1776 DFW PHL 6:10 10:05 11:05 15:05&lt;/P&gt;&lt;P&gt;2012-01-01 AA 2042 DFW FLL 6:35 10:05 11:05 15:05&lt;/P&gt;&lt;P&gt;2012-01-01 AA 392&amp;nbsp;&amp;nbsp;&amp;nbsp; ORD LGA 7:15 10:20 11:20 15:20&lt;/P&gt;&lt;P&gt;2012-01-01 AA 1137 ORD MSY 7:20 9:35 10:35 14:35&lt;/P&gt;&lt;P&gt;2012-01-01 AA 1762 MIA ATL 14:00 16:00 17:00 21:00&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_=1 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hash h(dataset: 'have (rename=(crs_dep_time=_dep))', multidata:'y');&lt;/P&gt;&lt;P&gt;&amp;nbsp; h.definekey('fl_date', 'carrier', 'origin');&lt;/P&gt;&lt;P&gt;&amp;nbsp; h.definedata('_dep');&lt;/P&gt;&lt;P&gt;&amp;nbsp; h.definedone(); call missing (_dep);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc=h.find(key: fl_date, key: carrier, key: dest);&lt;/P&gt;&lt;P&gt;&amp;nbsp; count=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do rc=0 by 0 while (rc=0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if min_connex_time &amp;lt; _dep &amp;lt; max_connex_time then count+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc=h.find_next(key: fl_date, key: carrier, key: dest);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; drop rc _dep;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jan 2014 03:49:37 GMT</pubDate>
    <dc:creator>Haikuo</dc:creator>
    <dc:date>2014-01-16T03:49:37Z</dc:date>
    <item>
      <title>Conditional Count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141917#M296709</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I was wondering if there is a way to count observations based on parameters given in the current observation. To me this sounds like a macro, however I'm not too familiar with those and maybe you guys know how to do it in a data step or proc sql.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My data looks like this:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;FL_DATE&lt;/TD&gt;&lt;TD&gt;CARRIER&lt;/TD&gt;&lt;TD&gt;FL_NUM&lt;/TD&gt;&lt;TD&gt;ORIGIN&lt;/TD&gt;&lt;TD&gt;DEST&lt;/TD&gt;&lt;TD&gt;crs_dep_time&lt;/TD&gt;&lt;TD&gt;crs_arr_time&lt;/TD&gt;&lt;TD&gt;min_connex_time&lt;/TD&gt;&lt;TD&gt;max_connex_time&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;2400&lt;/TD&gt;&lt;TD&gt;LAX&lt;/TD&gt;&lt;TD&gt;DFW&lt;/TD&gt;&lt;TD&gt;0:20&lt;/TD&gt;&lt;TD&gt;5:05&lt;/TD&gt;&lt;TD&gt;6:05&lt;/TD&gt;&lt;TD&gt;10:05&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;2043&lt;/TD&gt;&lt;TD&gt;SFO&lt;/TD&gt;&lt;TD&gt;DFW&lt;/TD&gt;&lt;TD&gt;0:25&lt;/TD&gt;&lt;TD&gt;5:35&lt;/TD&gt;&lt;TD&gt;6:35&lt;/TD&gt;&lt;TD&gt;10:35&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;2538&lt;/TD&gt;&lt;TD&gt;LAS&lt;/TD&gt;&lt;TD&gt;ORD&lt;/TD&gt;&lt;TD&gt;0:45&lt;/TD&gt;&lt;TD&gt;6:15&lt;/TD&gt;&lt;TD&gt;7:15&lt;/TD&gt;&lt;TD&gt;11:15&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;2297&lt;/TD&gt;&lt;TD&gt;JFK&lt;/TD&gt;&lt;TD&gt;MIA&lt;/TD&gt;&lt;TD&gt;5:35&lt;/TD&gt;&lt;TD&gt;8:45&lt;/TD&gt;&lt;TD&gt;9:45&lt;/TD&gt;&lt;TD&gt;13:45&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;1845&lt;/TD&gt;&lt;TD&gt;BOS&lt;/TD&gt;&lt;TD&gt;MIA&lt;/TD&gt;&lt;TD&gt;5:40&lt;/TD&gt;&lt;TD&gt;9:15&lt;/TD&gt;&lt;TD&gt;10:15&lt;/TD&gt;&lt;TD&gt;14:15&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;1776&lt;/TD&gt;&lt;TD&gt;DFW&lt;/TD&gt;&lt;TD&gt;PHL&lt;/TD&gt;&lt;TD&gt;6:10&lt;/TD&gt;&lt;TD&gt;10:05&lt;/TD&gt;&lt;TD&gt;11:05&lt;/TD&gt;&lt;TD&gt;15:05&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;2042&lt;/TD&gt;&lt;TD&gt;DFW&lt;/TD&gt;&lt;TD&gt;FLL&lt;/TD&gt;&lt;TD&gt;6:35&lt;/TD&gt;&lt;TD&gt;10:05&lt;/TD&gt;&lt;TD&gt;11:05&lt;/TD&gt;&lt;TD&gt;15:05&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;392&lt;/TD&gt;&lt;TD&gt;ORD&lt;/TD&gt;&lt;TD&gt;LGA&lt;/TD&gt;&lt;TD&gt;7:15&lt;/TD&gt;&lt;TD&gt;10:20&lt;/TD&gt;&lt;TD&gt;11:20&lt;/TD&gt;&lt;TD&gt;15:20&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;1137&lt;/TD&gt;&lt;TD&gt;ORD&lt;/TD&gt;&lt;TD&gt;MSY&lt;/TD&gt;&lt;TD&gt;7:20&lt;/TD&gt;&lt;TD&gt;9:35&lt;/TD&gt;&lt;TD&gt;10:35&lt;/TD&gt;&lt;TD&gt;14:35&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;1762&lt;/TD&gt;&lt;TD&gt;MIA&lt;/TD&gt;&lt;TD&gt;ATL&lt;/TD&gt;&lt;TD&gt;14:00&lt;/TD&gt;&lt;TD&gt;16:00&lt;/TD&gt;&lt;TD&gt;17:00&lt;/TD&gt;&lt;TD&gt;21:00&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The goal is to count for each flight number (fl_num) how many other flight numbers are able to connect.&lt;/P&gt;&lt;P&gt;I think I should not get too much into detail but mathematically I would explain it as this:&lt;/P&gt;&lt;P&gt;n=1 = current obs; N+k = each following&lt;/P&gt;&lt;P&gt;min_connex_time(n) &amp;lt; crs_dep_time (n+k) &amp;lt; max_connex_time (n)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dest(n) = Origin (n+k)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In words, the first observation describes a flight from Los Angeles to Denver. This can be connected to any flight in the following observations that fullfills the conditions, i.e. departing from the origin where the current flight arrived at and departing within the given timespan of min and max_arr_time&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This should generate a count variable, which displays how many times the condition was met.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The result should look like this:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;FL_DATE&lt;/TD&gt;&lt;TD&gt;CARRIER&lt;/TD&gt;&lt;TD&gt;FL_NUM&lt;/TD&gt;&lt;TD&gt;ORIGIN&lt;/TD&gt;&lt;TD&gt;DEST&lt;/TD&gt;&lt;TD&gt;crs_dep_time&lt;/TD&gt;&lt;TD&gt;crs_arr_time&lt;/TD&gt;&lt;TD&gt;min_connex_time&lt;/TD&gt;&lt;TD&gt;max_connex_time&lt;/TD&gt;&lt;TD&gt;Connex&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;2400&lt;/TD&gt;&lt;TD&gt;LAX&lt;/TD&gt;&lt;TD&gt;DFW&lt;/TD&gt;&lt;TD&gt;0:20&lt;/TD&gt;&lt;TD&gt;5:05&lt;/TD&gt;&lt;TD&gt;6:05&lt;/TD&gt;&lt;TD&gt;10:05&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;2043&lt;/TD&gt;&lt;TD&gt;SFO&lt;/TD&gt;&lt;TD&gt;DFW&lt;/TD&gt;&lt;TD&gt;0:25&lt;/TD&gt;&lt;TD&gt;5:35&lt;/TD&gt;&lt;TD&gt;6:35&lt;/TD&gt;&lt;TD&gt;10:35&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;2538&lt;/TD&gt;&lt;TD&gt;LAS&lt;/TD&gt;&lt;TD&gt;ORD&lt;/TD&gt;&lt;TD&gt;0:45&lt;/TD&gt;&lt;TD&gt;6:15&lt;/TD&gt;&lt;TD&gt;7:15&lt;/TD&gt;&lt;TD&gt;11:15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;2297&lt;/TD&gt;&lt;TD&gt;JFK&lt;/TD&gt;&lt;TD&gt;MIA&lt;/TD&gt;&lt;TD&gt;5:35&lt;/TD&gt;&lt;TD&gt;8:45&lt;/TD&gt;&lt;TD&gt;9:45&lt;/TD&gt;&lt;TD&gt;13:45&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;1845&lt;/TD&gt;&lt;TD&gt;BOS&lt;/TD&gt;&lt;TD&gt;MIA&lt;/TD&gt;&lt;TD&gt;5:40&lt;/TD&gt;&lt;TD&gt;9:15&lt;/TD&gt;&lt;TD&gt;10:15&lt;/TD&gt;&lt;TD&gt;14:15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;1776&lt;/TD&gt;&lt;TD&gt;DFW&lt;/TD&gt;&lt;TD&gt;PHL&lt;/TD&gt;&lt;TD&gt;6:10&lt;/TD&gt;&lt;TD&gt;10:05&lt;/TD&gt;&lt;TD&gt;11:05&lt;/TD&gt;&lt;TD&gt;15:05&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;2042&lt;/TD&gt;&lt;TD&gt;DFW&lt;/TD&gt;&lt;TD&gt;FLL&lt;/TD&gt;&lt;TD&gt;6:35&lt;/TD&gt;&lt;TD&gt;10:05&lt;/TD&gt;&lt;TD&gt;11:05&lt;/TD&gt;&lt;TD&gt;15:05&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;392&lt;/TD&gt;&lt;TD&gt;ORD&lt;/TD&gt;&lt;TD&gt;LGA&lt;/TD&gt;&lt;TD&gt;7:15&lt;/TD&gt;&lt;TD&gt;10:20&lt;/TD&gt;&lt;TD&gt;11:20&lt;/TD&gt;&lt;TD&gt;15:20&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;1137&lt;/TD&gt;&lt;TD&gt;ORD&lt;/TD&gt;&lt;TD&gt;MSY&lt;/TD&gt;&lt;TD&gt;7:20&lt;/TD&gt;&lt;TD&gt;9:35&lt;/TD&gt;&lt;TD&gt;10:35&lt;/TD&gt;&lt;TD&gt;14:35&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2012-01-01&lt;/TD&gt;&lt;TD&gt;AA&lt;/TD&gt;&lt;TD&gt;1762&lt;/TD&gt;&lt;TD&gt;MIA&lt;/TD&gt;&lt;TD&gt;ATL&lt;/TD&gt;&lt;TD&gt;14:00&lt;/TD&gt;&lt;TD&gt;16:00&lt;/TD&gt;&lt;TD&gt;17:00&lt;/TD&gt;&lt;TD&gt;21:00&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Let me know if I need to clarify anything.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance for any hints.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind regards,&lt;/P&gt;&lt;P&gt;Sandun&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Edit: I edited one flight number. They are usually distinct values, but in some instances of through flight two observations have the same number. But I will deal of that problem later&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jan 2014 15:09:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141917#M296709</guid>
      <dc:creator>Sandun89</dc:creator>
      <dc:date>2014-01-15T15:09:11Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141918#M296710</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I would think that proc sql will be the easiest way to code a solution to your problem, but I do have some questions regarding your data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You have 3 different arrival times and I don't think it is clear how they relate to each other.&amp;nbsp; e.g., flt 2400, as I understand it, might not arrive until 10:05 (&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;max_arr_time&lt;/SPAN&gt;).&amp;nbsp; However you indicated that it has two possible connections, even though no flights leave from DFW after 6:35.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jan 2014 16:08:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141918#M296710</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2014-01-15T16:08:57Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141919#M296711</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ok, so min_arr_time and max_arr_time refer to the minimum connection time of +1h and maximum connection time +5h (Maybe I should've just named it that :smileygrin:&amp;nbsp; I will edit the variable names in the first post) Sorry for the confusion.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So in the case of Fl_num 2400 it arrives at 5:05h in DFW. Therefore it can connect to flights that depart within 6:05h and 10:05h, in this case flights 1776, departing at 6:10h, and 2042, departing at 6:35h.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Flight 2043 can only connect to 2042, since 1776 departs 20 mins earlier than minimum connection time.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jan 2014 16:35:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141919#M296711</guid>
      <dc:creator>Sandun89</dc:creator>
      <dc:date>2014-01-15T16:35:29Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141920#M296712</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This could probably be done in one step, but I did it in two so that I could review the connection flights that were selected and counted:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table all as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select a.*,b.fl_num as con_flt&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from have a&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left join have b&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on a.dest eq b.origin&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.min_connex_time&amp;lt;=b.crs_dep_time&amp;lt;=max_connex_time&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by a.crs_dep_time&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table want as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select distinct FL_DATE, CARRIER,FL_NUM,ORIGIN,DEST,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; crs_dep_time,crs_arr_time,min_connex_time,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max_connex_time,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when missing(con_flt) then 0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else count(*)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end as counter&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from all&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by FL_NUM&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by crs_dep_time&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jan 2014 19:51:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141920#M296712</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2014-01-15T19:51:59Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141921#M296713</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You sir are awesome! Why didn't I come up with that solution?&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Kudos for using the join in such an interesting way.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you so much. This was my first post, so now you won me over and I'll stick around and see if I can help others as well.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jan 2014 20:49:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141921#M296713</guid>
      <dc:creator>Sandun89</dc:creator>
      <dc:date>2014-01-15T20:49:29Z</dc:date>
    </item>
    <item>
      <title>Re: Conditional Count</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141922#M296714</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am aware that Art's solution works (like it always does), here is another one using Hash.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input FL_DATE :yymmdd10. CARRIER :$2. (FL_NUM ORIGIN DEST) (:$4.) (crs_dep_time crs_arr_time min_connex_time max_connex_time) (:time5.);&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;2012-01-01 AA 2400 LAX DFW 0:20 5:05 6:05 10:05&lt;/P&gt;&lt;P&gt;2012-01-01 AA 2043 SFO DFW 0:25 5:35 6:35 10:35&lt;/P&gt;&lt;P&gt;2012-01-01 AA 2538 LAS ORD 0:45 6:15 7:15 11:15&lt;/P&gt;&lt;P&gt;2012-01-01 AA 2297 JFK MIA 5:35 8:45 9:45 13:45&lt;/P&gt;&lt;P&gt;2012-01-01 AA 1845 BOS MIA 5:40 9:15 10:15 14:15&lt;/P&gt;&lt;P&gt;2012-01-01 AA 1776 DFW PHL 6:10 10:05 11:05 15:05&lt;/P&gt;&lt;P&gt;2012-01-01 AA 2042 DFW FLL 6:35 10:05 11:05 15:05&lt;/P&gt;&lt;P&gt;2012-01-01 AA 392&amp;nbsp;&amp;nbsp;&amp;nbsp; ORD LGA 7:15 10:20 11:20 15:20&lt;/P&gt;&lt;P&gt;2012-01-01 AA 1137 ORD MSY 7:20 9:35 10:35 14:35&lt;/P&gt;&lt;P&gt;2012-01-01 AA 1762 MIA ATL 14:00 16:00 17:00 21:00&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_=1 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hash h(dataset: 'have (rename=(crs_dep_time=_dep))', multidata:'y');&lt;/P&gt;&lt;P&gt;&amp;nbsp; h.definekey('fl_date', 'carrier', 'origin');&lt;/P&gt;&lt;P&gt;&amp;nbsp; h.definedata('_dep');&lt;/P&gt;&lt;P&gt;&amp;nbsp; h.definedone(); call missing (_dep);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc=h.find(key: fl_date, key: carrier, key: dest);&lt;/P&gt;&lt;P&gt;&amp;nbsp; count=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do rc=0 by 0 while (rc=0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if min_connex_time &amp;lt; _dep &amp;lt; max_connex_time then count+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc=h.find_next(key: fl_date, key: carrier, key: dest);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; drop rc _dep;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jan 2014 03:49:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Conditional-Count/m-p/141922#M296714</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2014-01-16T03:49:37Z</dc:date>
    </item>
  </channel>
</rss>

