<?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: Find out the nearest branch for the customers in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159358#M31061</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I believe organizing your data in a long instead of a wide structure could make it easier for you. You then can use BY processing to determine and only select the top 3 ranks per category (business key). For most SAS Procedures it's beneficial to have data organized in a long structure.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA WORK.have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; INFILE DATALINES4&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DLM=','&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; truncover&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DSD;&lt;/P&gt;&lt;P&gt;&amp;nbsp; INPUT&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : $5.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : $20.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; city&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : $6.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; State&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : $3.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch1_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch2_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch3_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch4_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch5_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch6_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch7_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATALINES4;&lt;/P&gt;&lt;P&gt;James,892 TRUMAN CIR,FRISCO,TX,12.56,45.89,45.89,78.9,78.7,23.87,14.27&lt;/P&gt;&lt;P&gt;;;;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data inter (drop=_: Branch: rename=(BName=Branch_Name BDist=Branch_Distance));&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array bran {*} Branch:;&lt;/P&gt;&lt;P&gt;&amp;nbsp; length BName $32. BDist 8.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do _i= 1 to dim(bran);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not missing(bran[_i]) then &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BName=vname(bran[_i]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BDist=bran[_i];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=inter out=want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by Name Address City State Branch_Distance;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data rank;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by Name Address City State Branch_Distance;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.State then Rank=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.Branch_Distance then Rank+1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 06 Nov 2014 21:27:16 GMT</pubDate>
    <dc:creator>Patrick</dc:creator>
    <dc:date>2014-11-06T21:27:16Z</dc:date>
    <item>
      <title>Find out the nearest branch for the customers</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159355#M31058</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I stuck with the following scenario. Any help would be greatly appreciated.&lt;/P&gt;&lt;P&gt;I've the SAS dataset as below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="1233"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD height="20" width="64"&gt;Name&lt;/TD&gt;&lt;TD width="114"&gt;Address&lt;/TD&gt;&lt;TD width="64"&gt;city&lt;/TD&gt;&lt;TD width="64"&gt;State&lt;/TD&gt;&lt;TD width="130"&gt;Branch1_distance&lt;/TD&gt;&lt;TD width="149"&gt;Branch2_distance&lt;/TD&gt;&lt;TD width="125"&gt;Branch3_distance&lt;/TD&gt;&lt;TD width="116"&gt;Branch4_distance&lt;/TD&gt;&lt;TD width="151"&gt;Branch5_distance&lt;/TD&gt;&lt;TD width="132"&gt;Branch6_distance&lt;/TD&gt;&lt;TD width="124"&gt;Branch7_distance&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="20"&gt;James&lt;/TD&gt;&lt;TD&gt;892 TRUMAN CIR&lt;/TD&gt;&lt;TD&gt;FRISCO&lt;/TD&gt;&lt;TD&gt;TX&lt;/TD&gt;&lt;TD align="right"&gt;12.56&lt;/TD&gt;&lt;TD align="right"&gt;45.89&lt;/TD&gt;&lt;TD align="right"&gt;54.23&lt;/TD&gt;&lt;TD align="right"&gt;78.9&lt;/TD&gt;&lt;TD align="right"&gt;78.7&lt;/TD&gt;&lt;TD align="right"&gt;23.87&lt;/TD&gt;&lt;TD align="right"&gt;14.27&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;With this data, I've found the least 3 distance via smallest function. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="1557"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD height="20" width="64"&gt;Name&lt;/TD&gt;&lt;TD width="114"&gt;Address&lt;/TD&gt;&lt;TD width="64"&gt;city&lt;/TD&gt;&lt;TD width="64"&gt;State&lt;/TD&gt;&lt;TD width="130"&gt;Branch1_distance&lt;/TD&gt;&lt;TD width="149"&gt;Branch2_distance&lt;/TD&gt;&lt;TD width="125"&gt;Branch3_distance&lt;/TD&gt;&lt;TD width="116"&gt;Branch4_distance&lt;/TD&gt;&lt;TD width="151"&gt;Branch5_distance&lt;/TD&gt;&lt;TD width="132"&gt;Branch6_distance&lt;/TD&gt;&lt;TD width="124"&gt;Branch7_distance&lt;/TD&gt;&lt;TD width="100"&gt;min-distance1&lt;/TD&gt;&lt;TD width="127"&gt;min-distance2&lt;/TD&gt;&lt;TD width="97"&gt;min-distance3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="20"&gt;James&lt;/TD&gt;&lt;TD&gt;892 TRUMAN CIR&lt;/TD&gt;&lt;TD&gt;FRISCO&lt;/TD&gt;&lt;TD&gt;TX&lt;/TD&gt;&lt;TD align="right"&gt;12.56&lt;/TD&gt;&lt;TD align="right"&gt;45.89&lt;/TD&gt;&lt;TD align="right"&gt;54.23&lt;/TD&gt;&lt;TD align="right"&gt;78.9&lt;/TD&gt;&lt;TD align="right"&gt;78.7&lt;/TD&gt;&lt;TD align="right"&gt;23.87&lt;/TD&gt;&lt;TD align="right"&gt;14.27&lt;/TD&gt;&lt;TD align="right"&gt;12.56&lt;/TD&gt;&lt;TD align="right"&gt;14.27&lt;/TD&gt;&lt;TD align="right"&gt;23.87&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But I wish to produce the dataset which depicts the three nearest branch for the customer. Dataset like below or similar one. Here the complexity is to name the last three variables. There are also a situation where I've 25+ branches with 60K+ records as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="1868"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD height="20" width="64"&gt;Name&lt;/TD&gt;&lt;TD width="114"&gt;Address&lt;/TD&gt;&lt;TD width="64"&gt;city&lt;/TD&gt;&lt;TD width="64"&gt;State&lt;/TD&gt;&lt;TD width="130"&gt;Branch1_distance&lt;/TD&gt;&lt;TD width="149"&gt;Branch2_distance&lt;/TD&gt;&lt;TD width="125"&gt;Branch3_distance&lt;/TD&gt;&lt;TD width="116"&gt;Branch4_distance&lt;/TD&gt;&lt;TD width="151"&gt;Branch5_distance&lt;/TD&gt;&lt;TD width="132"&gt;Branch6_distance&lt;/TD&gt;&lt;TD width="124"&gt;Branch7_distance&lt;/TD&gt;&lt;TD width="100"&gt;min-distance1&lt;/TD&gt;&lt;TD width="127"&gt;min-distance2&lt;/TD&gt;&lt;TD width="97"&gt;min-distance3&lt;/TD&gt;&lt;TD width="126"&gt;Branch1_distance&lt;/TD&gt;&lt;TD width="121"&gt;Branch7_distance&lt;/TD&gt;&lt;TD width="64"&gt;Branch6_distance&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD height="20"&gt;James&lt;/TD&gt;&lt;TD&gt;892 TRUMAN CIR&lt;/TD&gt;&lt;TD&gt;FRISCO&lt;/TD&gt;&lt;TD&gt;TX&lt;/TD&gt;&lt;TD align="right"&gt;12.56&lt;/TD&gt;&lt;TD align="right"&gt;45.89&lt;/TD&gt;&lt;TD align="right"&gt;54.23&lt;/TD&gt;&lt;TD align="right"&gt;78.9&lt;/TD&gt;&lt;TD align="right"&gt;78.7&lt;/TD&gt;&lt;TD align="right"&gt;23.87&lt;/TD&gt;&lt;TD align="right"&gt;14.27&lt;/TD&gt;&lt;TD align="right"&gt;12.56&lt;/TD&gt;&lt;TD align="right"&gt;14.27&lt;/TD&gt;&lt;TD align="right"&gt;23.87&lt;/TD&gt;&lt;TD align="right"&gt;12.56&lt;/TD&gt;&lt;TD align="right"&gt;14.27&lt;/TD&gt;&lt;TD align="right"&gt;23.87&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 12:30:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159355#M31058</guid>
      <dc:creator>RamKumar</dc:creator>
      <dc:date>2014-11-06T12:30:10Z</dc:date>
    </item>
    <item>
      <title>Re: Find out the nearest branch for the customers</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159356#M31059</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;[1] Use SMALLEST() function to get the smallest by passing i = 1, 2, 3.&lt;/P&gt;&lt;P&gt;[2] Use WHICHN() function to the numeric order of variable for [1]&lt;/P&gt;&lt;P&gt;[3] Use VNAME() function to get the NAME for [2]&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 13:43:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159356#M31059</guid>
      <dc:creator>KachiM</dc:creator>
      <dc:date>2014-11-06T13:43:17Z</dc:date>
    </item>
    <item>
      <title>Re: Find out the nearest branch for the customers</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159357#M31060</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Alternatively, sort your array (for example: &lt;A href="http://en.wikipedia.org/wiki/Bubble_sort" title="http://en.wikipedia.org/wiki/Bubble_sort"&gt;Bubble sort - Wikipedia, the free encyclopedia&lt;/A&gt;)&lt;/P&gt;&lt;P&gt;Then array{1-3} will contain your values.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 14:52:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159357#M31060</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2014-11-06T14:52:53Z</dc:date>
    </item>
    <item>
      <title>Re: Find out the nearest branch for the customers</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159358#M31061</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I believe organizing your data in a long instead of a wide structure could make it easier for you. You then can use BY processing to determine and only select the top 3 ranks per category (business key). For most SAS Procedures it's beneficial to have data organized in a long structure.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA WORK.have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; INFILE DATALINES4&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DLM=','&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; truncover&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DSD;&lt;/P&gt;&lt;P&gt;&amp;nbsp; INPUT&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : $5.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : $20.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; city&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : $6.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; State&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : $3.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch1_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch2_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch3_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch4_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch5_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch6_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch7_distance : best32.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; DATALINES4;&lt;/P&gt;&lt;P&gt;James,892 TRUMAN CIR,FRISCO,TX,12.56,45.89,45.89,78.9,78.7,23.87,14.27&lt;/P&gt;&lt;P&gt;;;;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data inter (drop=_: Branch: rename=(BName=Branch_Name BDist=Branch_Distance));&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array bran {*} Branch:;&lt;/P&gt;&lt;P&gt;&amp;nbsp; length BName $32. BDist 8.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do _i= 1 to dim(bran);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not missing(bran[_i]) then &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BName=vname(bran[_i]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BDist=bran[_i];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=inter out=want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by Name Address City State Branch_Distance;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data rank;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by Name Address City State Branch_Distance;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.State then Rank=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if first.Branch_Distance then Rank+1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 21:27:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159358#M31061</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2014-11-06T21:27:16Z</dc:date>
    </item>
    <item>
      <title>Re: Find out the nearest branch for the customers</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159359#M31062</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ram,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Some years ago Paul Dorfman posted a macro on the SAS-L bulletin board that may be exactly what you're looking for (combined with the other suggestions that have been provided). It allows you to sort by one variable, but have a second variable re-ordered according to the results of that sort.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is an example with your test data:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; infile cards dlm='09'x;&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat name $20.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat address $50.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat city $30.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat state $2.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input Name Address city State Branch1_distance Branch2_distance Branch3_distance Branch4_distance Branch5_distance Branch6_distance Branch7_distance;&lt;/P&gt;&lt;P&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P&gt;James 892 TRUMAN CIR FRISCO TX 12.56 45.89 54.23 78.9 78.7 23.87 14.27&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro combsort (arr1 =, arr2=, order= &amp;lt;);&lt;/P&gt;&lt;P&gt;&amp;nbsp; drop __:;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do __g = hbound (&amp;amp;arr1) - 1 by 0 while (__s or __g &amp;gt; 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __g = int (__g / 1.3);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if __g in (0 ) then __g = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if __g in (9, 10) then __g = 11;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __s = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do __j = lbound (&amp;amp;arr1) to hbound (&amp;amp;arr1) - __g;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __k = __j + __g;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if &amp;amp;arr1[__j] &amp;amp;order &amp;amp;arr1[__k] then continue;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __t = &amp;amp;arr1[__j];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;arr1[__j] = &amp;amp;arr1[__k];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;arr1[__k] = __t;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __tt = &amp;amp;arr2[__j];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;arr2[__j] = &amp;amp;arr2[__k];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;arr2[__k] = __tt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __s = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array bdist(*) $15. branch:;&lt;/P&gt;&lt;P&gt;&amp;nbsp; array bname(7) $10.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do _n_=1 to 7;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bname(_n_)=scan(vname(bdist(_n_)),1,'_');&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %combsort(arr1=bdist, arr2=bname);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 23:00:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Find-out-the-nearest-branch-for-the-customers/m-p/159359#M31062</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2014-11-06T23:00:32Z</dc:date>
    </item>
  </channel>
</rss>

