<?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: a queueing model in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/604775#M76526</link>
    <description>&lt;P&gt;If you go through the products sequentially (SET statement) you don't need to remove them. just remove the customers from the hash table as you find a match when you iterate the hash table,&lt;/P&gt;</description>
    <pubDate>Tue, 19 Nov 2019 09:38:59 GMT</pubDate>
    <dc:creator>ChrisNZ</dc:creator>
    <dc:date>2019-11-19T09:38:59Z</dc:date>
    <item>
      <title>a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/603143#M76460</link>
      <description>&lt;P&gt;Hi there,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;i am trying to create a queuing model say something is going to be sold to the first person through the door so long as they satisfy certain income criteria.&amp;nbsp; So it would go something like this a-&amp;gt; person a; b-&amp;gt; person d; e-&amp;gt;person b. For each product in list a, it go to the front of the remaining queue and pick the eligible purchaser. My code is pasted below.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The issue though is that it seems to move on from ineligible purchasers rather than keeping them in a queue. As you can see below, the 5th customer has too much income for the 5th product, but should have stayed in the queue and takes up the 6th offering. instead, it just skips ahead to the 6th customer.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Does anyone know what went wrong and how I can fix it?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;thanks&lt;/P&gt;&lt;P&gt;JC&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data market;&lt;BR /&gt;input UB LB;&lt;BR /&gt;datalines;&lt;BR /&gt;137454.23 99272.50&lt;BR /&gt;127407.23 92016.34&lt;BR /&gt;134738.07 97310.83&lt;BR /&gt;118503.53 85585.88&lt;BR /&gt;117691.52 84999.43&lt;BR /&gt;126468.91 91338.66&lt;BR /&gt;138833.30 100268.50&lt;BR /&gt;;;;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data customers;&lt;BR /&gt;input pay;&lt;BR /&gt;datalines;&lt;BR /&gt;117605&lt;BR /&gt;120194&lt;BR /&gt;114285&lt;BR /&gt;92316&lt;BR /&gt;125917&lt;BR /&gt;106480&lt;BR /&gt;94244&lt;BR /&gt;127482&lt;BR /&gt;94744&lt;BR /&gt;106371&lt;BR /&gt;122085&lt;BR /&gt;100327&lt;BR /&gt;107315&lt;BR /&gt;115530&lt;BR /&gt;116100&lt;BR /&gt;100279&lt;BR /&gt;94117&lt;BR /&gt;111069&lt;BR /&gt;98615&lt;BR /&gt;115879&lt;BR /&gt;124773&lt;BR /&gt;118694&lt;BR /&gt;111970&lt;BR /&gt;118629&lt;BR /&gt;129623&lt;BR /&gt;121400&lt;BR /&gt;100992&lt;BR /&gt;129743&lt;BR /&gt;93083&lt;BR /&gt;90643&lt;BR /&gt;;;;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;Data matching;&lt;BR /&gt;set market;&lt;BR /&gt;do i = 1 to 7&lt;BR /&gt;set customers;&lt;BR /&gt;&lt;BR /&gt;if LB&amp;lt;pay&amp;lt;UB And control= . then do;&lt;BR /&gt;control=1;&lt;BR /&gt;output;&lt;BR /&gt;leave;&lt;BR /&gt;end;&lt;BR /&gt;&lt;BR /&gt;end;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Results:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;137454.2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;99272.5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;117605&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;127407.2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;92016.34&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;120194&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;134738.1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;97310.83&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;114285&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;118503.5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;85585.88&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;92316&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;117691.5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;84999.43&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;106480&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;126468.9&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;91338.66&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;94244&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;138833.3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;100268.5&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;127482&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Mon, 11 Nov 2019 10:41:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/603143#M76460</guid>
      <dc:creator>torestin</dc:creator>
      <dc:date>2019-11-11T10:41:58Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/604649#M76514</link>
      <description>&lt;P&gt;1. Why&amp;nbsp; 7&amp;nbsp; in this line of code?&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;do i = 1 to 7&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;2. The problem you ignore, if I understand correctly, is that you need to remove customers as they are used.&lt;/P&gt;
&lt;P&gt;If true, a hash table would serve you better than reading a static customer table.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 15 Nov 2019 22:40:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/604649#M76514</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2019-11-15T22:40:16Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/604679#M76518</link>
      <description>&lt;P&gt;hey thanks for that.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1) actually i am a bit lost about why I put the loop there in the first place now! but it's probably there to enable the leave statement...&lt;/P&gt;&lt;P&gt;2) what I was trying to do was actually to remove both the qualifying range and the customer from the respective sets. So it reads product 1 from the market set, picks out customer 1 from the customer set removes it, then move on to product 2, picks out customer 3, product 3/customer 2, etc. which iterates down the existing queue. I thought the hash table would only give me the match, or non-match - eg if customer 8 cannot find any matching product - but won't do the double elimination?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 16 Nov 2019 10:17:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/604679#M76518</guid>
      <dc:creator>torestin</dc:creator>
      <dc:date>2019-11-16T10:17:35Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/604775#M76526</link>
      <description>&lt;P&gt;If you go through the products sequentially (SET statement) you don't need to remove them. just remove the customers from the hash table as you find a match when you iterate the hash table,&lt;/P&gt;</description>
      <pubDate>Tue, 19 Nov 2019 09:38:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/604775#M76526</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2019-11-19T09:38:59Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/605642#M76543</link>
      <description>&lt;P&gt;right...so this is how i thought hash would work: I need to insert a key/item into both set so they have something to match, and then I see if the condition is satisfied.&lt;/P&gt;&lt;P&gt;However, it now says pay is uninitiated so doesn't seem to have read the pay values into the hash table. Where did I go wrong?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data market;&lt;BR /&gt;input control UB LB;&lt;BR /&gt;datalines;&lt;BR /&gt;1 137454.23 99272.50&lt;BR /&gt;1 127407.23 92016.34&lt;BR /&gt;1 134738.07 97310.83&lt;BR /&gt;1 118503.53 85585.88&lt;BR /&gt;1 117691.52 84999.43&lt;BR /&gt;1 126468.91 91338.66&lt;BR /&gt;1 138833.30 100268.50&lt;BR /&gt;;;;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data customers;&lt;BR /&gt;input control pay;&lt;BR /&gt;datalines;&lt;BR /&gt;1 117605&lt;BR /&gt;1 120194&lt;BR /&gt;1 114285&lt;BR /&gt;1 92316&lt;BR /&gt;1 125917&lt;BR /&gt;1 106480&lt;BR /&gt;1 94244&lt;BR /&gt;1 127482&lt;BR /&gt;1 94744&lt;BR /&gt;1 106371&lt;BR /&gt;1 122085&lt;BR /&gt;1 100327&lt;BR /&gt;1 107315&lt;BR /&gt;1 115530&lt;BR /&gt;1 116100&lt;BR /&gt;1 100279&lt;BR /&gt;1 94117&lt;BR /&gt;1 111069&lt;BR /&gt;1 98615&lt;BR /&gt;1 115879&lt;BR /&gt;1 124773&lt;BR /&gt;1 118694&lt;BR /&gt;1 111970&lt;BR /&gt;1 118629&lt;BR /&gt;1 129623&lt;BR /&gt;1 121400&lt;BR /&gt;1 100992&lt;BR /&gt;1 129743&lt;BR /&gt;1 93083&lt;BR /&gt;1 90643&lt;BR /&gt;;;;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data M;&lt;/P&gt;&lt;P&gt;If _n_=1 then do;&lt;/P&gt;&lt;P&gt;Declare Hash m(dataset:"customers");&lt;/P&gt;&lt;P&gt;m.definekey('control');&lt;/P&gt;&lt;P&gt;m.definedata('pay');&lt;/P&gt;&lt;P&gt;m.definedone();&lt;BR /&gt;end;&lt;/P&gt;&lt;P&gt;Set market;&lt;BR /&gt;if m.find()=0 then do;&lt;/P&gt;&lt;P&gt;If LB&amp;lt;pay&amp;lt;UB then do;&lt;/P&gt;&lt;P&gt;Output;&lt;/P&gt;&lt;P&gt;m.remove();&lt;/P&gt;&lt;P&gt;end;&lt;BR /&gt;End;&lt;/P&gt;&lt;P&gt;Run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Nov 2019 08:32:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/605642#M76543</guid>
      <dc:creator>torestin</dc:creator>
      <dc:date>2019-11-20T08:32:58Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/605643#M76544</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/130809"&gt;@torestin&lt;/a&gt;&amp;nbsp;what does your desired result from this data look like?&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Nov 2019 08:41:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/605643#M76544</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-11-20T08:41:24Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/605648#M76545</link>
      <description>&lt;P&gt;The desired result would look like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;product&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;&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; Customer pay &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; matching result&lt;/P&gt;&lt;P&gt;UB&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; LB&lt;/P&gt;&lt;P&gt;137454.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 99272.5&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; 117605&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; 137454.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 99272.5 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 117605&lt;/P&gt;&lt;P&gt;127407.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 92016.34&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 120194&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; 127407.2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 92016.34&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 120194&lt;/P&gt;&lt;P&gt;134738.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 97310.83&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 114285&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; 134738.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 97310.83&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 114285&lt;/P&gt;&lt;P&gt;118503.5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 85585.88&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 92316&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; &amp;nbsp;&amp;nbsp; 118503.5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 85585.88&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 92316&lt;/P&gt;&lt;P&gt;117691.5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 84999.43&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 125917&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; 117691.5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 84999.43&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 106480&lt;/P&gt;&lt;P&gt;126468.9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 91338.66&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 106480&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; 126468.9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 91338.66&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 125917&lt;/P&gt;&lt;P&gt;138833.3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100268.5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 94244&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; &amp;nbsp; 138833.3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100268.5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 94244&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;so that the fifth product is matched with the 6th customer, but the 5th customer (pay) 125917 remains in queue and picks up the 6th product, instead of being skipped altogether&lt;/P&gt;</description>
      <pubDate>Wed, 20 Nov 2019 09:11:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/605648#M76545</guid>
      <dc:creator>torestin</dc:creator>
      <dc:date>2019-11-20T09:11:44Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/605657#M76546</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/130809"&gt;@torestin&lt;/a&gt;&amp;nbsp;I like the idea of using a hash object to implement this. You can do something like this&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
    format UB LB pay;
    keep   UB LB pay;
    if _N_=1 then do;
        declare hash h(ordered:'Y');
        h.definekey('k');
        h.definedata('k', 'pay');
        h.definedone();
        declare hiter hi('h');
    end;

    do k=1 by 1 until (lr1);
        set customers end=lr1;
        h.add();
    end;

    do until (lr2);
        set market end=lr2;

        do until (LB &amp;lt;= pay &amp;lt;= UB);
            rc=hi.next();
        end;

        output;

        _k=k;
        rc=hi.last();
        rc=hi.next();
        rc=h.remove(key: _k);
    end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;UB        LB       pay
137454.23 99272.5  117605
127407.23 92016.34 120194
134738.07 97310.83 114285
118503.53 85585.88 92316
117691.52 84999.43 106480
126468.91 91338.66 125917
138833.3  100268.5 127482&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Nov 2019 11:26:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/605657#M76546</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-11-20T11:26:01Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606080#M76553</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/130809"&gt;@torestin&lt;/a&gt;&amp;nbsp;did this work for you?&lt;/P&gt;</description>
      <pubDate>Thu, 21 Nov 2019 11:35:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606080#M76553</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-11-21T11:35:18Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606293#M76561</link>
      <description>&lt;P&gt;Hey thanks for that. Yup it works...the only snag is that it seems to get stuck with larger dataset, I was going to do some investigation before coming back.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 21 Nov 2019 21:12:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606293#M76561</guid>
      <dc:creator>torestin</dc:creator>
      <dc:date>2019-11-21T21:12:08Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606294#M76562</link>
      <description>&lt;P&gt;When you say 'get stuck' what do you mean?&lt;/P&gt;</description>
      <pubDate>Thu, 21 Nov 2019 21:13:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606294#M76562</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-11-21T21:13:46Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606297#M76563</link>
      <description>it took overnight to do a match (400 in products; 2000 pop) and never actually finished it and i had to stop it. Log showed it read both and then nothing. So I am not sure if it actually started execute the hash table. (I am also using the university edition so maybe some restrictions on that?)</description>
      <pubDate>Thu, 21 Nov 2019 21:17:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606297#M76563</guid>
      <dc:creator>torestin</dc:creator>
      <dc:date>2019-11-21T21:17:57Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606301#M76564</link>
      <description>&lt;P&gt;Investigating my code a bit deeper, I think a problem may arise if no customer satisfies the range being considered. This would send the code into an infinite loop. Consider the situation and the code below&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data market;
input UB LB;
datalines;
137454.23 99272.50
127407.23 92016.34
134738.07 97310.83
118503.53 85585.88
117691.52 84999.43
126468.91 91338.66
138833.30 100268.50
;;;;
run;

data customers;
input pay;
datalines;
117605
120194
114285
1
1
1
1
1
1
1
1
1
1
1
;;;;
run;

data want;
    format UB LB pay;
    keep   UB LB pay;
    if _N_=1 then do;
        declare hash h(ordered:'Y');
        h.definekey('k');
        h.definedata('k', 'pay');
        h.definedone();
        declare hiter hi('h');
    end;

    do k=1 by 1 until (lr1);
        set customers end=lr1;
        h.add();
    end;

    do until (lr2);
        set market end=lr2;

        do until (LB &amp;lt;= pay &amp;lt;= UB | rc ne 0);
            rc=hi.next();
        end;
        if rc=0 then do;
           output;
           _k=k;
           rc=hi.last();
           rc=hi.next();
           rc=h.remove(key: _k);
        end;
        else do;
           pay=.;
           output;
           rc=hi.last();
           rc=hi.next();       
        end;

    end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 21 Nov 2019 21:33:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606301#M76564</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-11-21T21:33:51Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606305#M76565</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31304"&gt;@PeterClemmensen&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;Can't test now, so maybe a silly question.&lt;/P&gt;
&lt;P&gt;Why not&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;        if rc then pay=.;
        else h.remove();
        output;
        rc=hi.first();
  &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 21 Nov 2019 21:50:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606305#M76565</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2019-11-21T21:50:33Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606312#M76566</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/16961"&gt;@ChrisNZ&lt;/a&gt;&amp;nbsp;as I understand it, I can't use the Remove() Method, when the object is locked by an iterator?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Feel free to test my code and find a better way. There is definitely a better way. I'm learning about stacks and queues in SAS myself, so any thoughts are greatly&amp;nbsp;appreciated. I mainly used&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/21262"&gt;@hashman&lt;/a&gt;s book on the topic.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Btw, now that I tagged him, he will probably come around and write a better solution in 3 lines &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&amp;nbsp; At least, I'll learn something...&lt;/P&gt;</description>
      <pubDate>Thu, 21 Nov 2019 22:07:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606312#M76566</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-11-21T22:07:22Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606316#M76567</link>
      <description>&lt;P&gt;You couldn't use a better source than this book!&lt;/P&gt;
&lt;P&gt;You are right, you need to move the iterator:&lt;/P&gt;
&lt;TABLE cellspacing="2" cellpadding="4"&gt;
&lt;TBODY&gt;
&lt;TR valign="top"&gt;
&lt;TD class="label" width="95" align="left"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD class="bgBlockLight" align="left"&gt;If an associated hash iterator is pointing to the &lt;SPAN class="strongEmph"&gt;keyvalue&lt;/SPAN&gt;, then the REMOVE method will not remove the key or data from the hash object. An error message is issued.&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;All good, it makes perfect sense now! &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 21 Nov 2019 22:21:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606316#M76567</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2019-11-21T22:21:13Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606362#M76571</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31304"&gt;@PeterClemmensen&lt;/a&gt;:&lt;/P&gt;
&lt;P&gt;Methinks your solution is fine. This:&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;         rc&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;hi&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;last&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
         rc&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;hi&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;next&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;is also the right thing to do if you just want a simple means to make sure you don't get the iterator locking error.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The only slight inaccuracy in "&lt;SPAN&gt; the object is locked by an iterator" is that the iterator locks not the whole table but all the items within the same-key group where the iterator currently dwells. Of course, when you want to purge the whole thing with CLEAR, i.e. every key group,the iterator pointer must be moved completely out of the table before calling CLEAR - and the two calls above (or first/prev - doesn't matter) are the simplest and fastest way of achieving it. You can figure it all out mighty quickly by playing a little bit with this piece of code:&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_ ;                                                                                                                                                                                                                                                   
  dcl hash h (multidata:"y", ordered:"a") ;                                                                                                                                                                                                                     
  h.definekey ("k") ;                                                                                                                                                                                                                                           
  h.definedone () ;                                                                                                                                                                                                                                             
  dcl hiter ih ("h") ;                                                                                                                                                                                                                                          
  do k = 1, 2, 2, 3, 3, 3 ;                                                                                                                                                                                                                                     
    h.add() ;                                                                                                                                                                                                                                                   
  end ;                                                                                                                                                                                                                                                         
  do i = 1 to 3 ;                                                                                                                                                                                                                                               
    _n_ = ih.next() ;                                                                                                                                                                                                                                           
  end ;                                                                                                                                                                                                                                                         
  h.remove (key:1) ; * works ;                                                                                                                                                                                                                                    
* h.remove (key:2) ; * fails ;                                                                                                                                                                                                                                    
  h.remove (key:3) ; * works ;                                                                                                                                                                                                                                    
run ;            
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN&gt;You'll invariably see that getting the iterator out of a same-key group frees it for removal. Note that ordering the table is a must, as otherwise you cannot control when the iterator gets out of the same-key group. And, as said above, getting it out of the table altogether (above, it would happen if the upper bound of the DO I loop were 7) frees them all. But if the latter is the goal, why enumerate the whole table (as astonishingly ill-advised in one of SAS Support tech notes, especially if the table is big) if you can just use the pair of last/next or first/prev.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Kind regards&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Paul D.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 22 Nov 2019 02:37:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606362#M76571</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2019-11-22T02:37:33Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606459#M76575</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/21262"&gt;@hashman&lt;/a&gt;&amp;nbsp;Thank you for the explanation. Makes sense.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do you happen to have a link to that&amp;nbsp;&lt;SPAN&gt;SAS Support tech note?&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 22 Nov 2019 14:13:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606459#M76575</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-11-22T14:13:39Z</dc:date>
    </item>
    <item>
      <title>Re: a queueing model</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606537#M76581</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31304"&gt;@PeterClemmensen&lt;/a&gt;:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://support.sas.com/kb/42/525.html" target="_self"&gt;http://support.sas.com/kb/42/525.html&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;Paul D.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 22 Nov 2019 18:21:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/a-queueing-model/m-p/606537#M76581</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2019-11-22T18:21:35Z</dc:date>
    </item>
  </channel>
</rss>

