<?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: How to use call sortn with a multidimensional array in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108788#M22608</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Why not write it to a dataset and then use proc sort?&amp;nbsp; Would easily handle the second example.&amp;nbsp; To do the first just write it out by column instead of rows. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 29 Oct 2012 18:48:19 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2012-10-29T18:48:19Z</dc:date>
    <item>
      <title>How to use call sortn with a multidimensional array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108785#M22605</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;In response to a post earlier today I used a slightly modified version of one of Paul Dorfman's old sort macros to do what I wanted, but I was wondering if one could accomplish the same result using call sortn.&amp;nbsp; Yes, I know that the problem can be addressed with either a hash or proc surveyselect, but I'm more interested in knowing how to sort a multidimensional array based on just one of the dimensions.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;In the present case I was trying to randomly assign values to 5 different groups over 10,000 iterations. e.g., I think the following does what I want to know if/how it could be done using call sortn using just one two-dimensional array:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%let n=1000;&lt;BR /&gt;%macro combsort (arr1 =, arr2=, order= &amp;lt;);&lt;BR /&gt;&amp;nbsp; drop __:;&lt;BR /&gt;&amp;nbsp; do __g = hbound (&amp;amp;arr1) - 1 by 0 while (__s or __g &amp;gt; 1);&lt;BR /&gt;&amp;nbsp; __g = int (__g / 1.3);&lt;BR /&gt;&amp;nbsp; if __g in (0 ) then __g = 1;&lt;BR /&gt;&amp;nbsp; else if __g in (9, 10) then __g = 11;&lt;BR /&gt;&amp;nbsp; __s = 0;&lt;BR /&gt;&amp;nbsp; do __j = lbound (&amp;amp;arr1) to hbound (&amp;amp;arr1) - __g;&lt;BR /&gt;&amp;nbsp; __k = __j + __g;&lt;BR /&gt;&amp;nbsp; if &amp;amp;arr1[__j] &amp;amp;order &amp;amp;arr1[__k] then continue;&lt;BR /&gt;&amp;nbsp; __t = &amp;amp;arr1[__j];&lt;BR /&gt;&amp;nbsp; &amp;amp;arr1[__j] = &amp;amp;arr1[__k];&lt;BR /&gt;&amp;nbsp; &amp;amp;arr1[__k] = __t;&lt;BR /&gt;&amp;nbsp; __t = &amp;amp;arr2[__j];&lt;BR /&gt;&amp;nbsp; &amp;amp;arr2[__j] = &amp;amp;arr2[__k];&lt;BR /&gt;&amp;nbsp; &amp;amp;arr2[__k] = __t;&lt;BR /&gt;&amp;nbsp; __s = 1;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;%mend;&lt;BR /&gt;data want (keep=trial group:);&lt;BR /&gt;&amp;nbsp; array values(&amp;amp;n.);&lt;BR /&gt;&amp;nbsp; do until (eof);&lt;BR /&gt;&amp;nbsp; set hej end=eof;&lt;BR /&gt;&amp;nbsp; i+1;&lt;BR /&gt;&amp;nbsp; values(i)=y;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; array ordering(&amp;amp;n.);&lt;BR /&gt;&amp;nbsp; array group1_(%eval(&amp;amp;n./5));&lt;BR /&gt;&amp;nbsp; array group2_(%eval(&amp;amp;n./5));&lt;BR /&gt;&amp;nbsp; array group3_(%eval(&amp;amp;n./5));&lt;BR /&gt;&amp;nbsp; array group4_(%eval(&amp;amp;n./5));&lt;BR /&gt;&amp;nbsp; array group5_(%eval(&amp;amp;n./5));&lt;BR /&gt;&amp;nbsp; do trial=1 to 10000;&lt;BR /&gt;&amp;nbsp; do i=1 to &amp;amp;n.;&lt;BR /&gt;&amp;nbsp; ordering(i)=ranuni(0);&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; %combsort(arr1=ordering, arr2=values);&lt;BR /&gt;&amp;nbsp; k=0;&lt;BR /&gt;&amp;nbsp; do i=1 to 5;&lt;BR /&gt;&amp;nbsp; do j=1 to %eval(&amp;amp;n./5);&lt;BR /&gt;&amp;nbsp; k+1;&lt;BR /&gt;&amp;nbsp; if i eq 1 then group1_(j)=values(k);&lt;BR /&gt;&amp;nbsp; else if i eq 2 then group2_(j)=values(k);&lt;BR /&gt;&amp;nbsp; else if i eq 3 then group3_(j)=values(k);&lt;BR /&gt;&amp;nbsp; else if i eq 4 then group4_(j)=values(k);&lt;BR /&gt;&amp;nbsp; else if i eq 5 then group5_(j)=values(k);&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 26 Oct 2012 23:21:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108785#M22605</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-10-26T23:21:40Z</dc:date>
    </item>
    <item>
      <title>Re: How to use call sortn with a multidimensional array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108786#M22606</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Art.T&lt;/P&gt;&lt;P&gt;That is easy. Using macro variable to wrap these array elements.&lt;/P&gt;&lt;P&gt;If you know some algorithm about sorting, then you don't need function SORTN() either .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data _null_;
length x $ 200;
do i=1 to 2;
 do j=1 to 3;
&amp;nbsp; x=catx(',',x,cats('a{',i,',',j,'}'));
 end;
 call symputx(cats('a',i),x);
 call missing(x);
end;
run;
%put _user_;



data _null_;
array a{2,3} _temporary_ (2 4 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;&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; 5 3 2 ) ;

call sortn(&amp;amp;a1);
call sortn(&amp;amp;a2);


do i=1 to 2;
 do j=1 to 3;
&amp;nbsp; put a{i,j}= @;
 end;
 put / ;
end;
run;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 29 Oct 2012 04:27:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108786#M22606</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-10-29T04:27:33Z</dc:date>
    </item>
    <item>
      <title>Re: How to use call sortn with a multidimensional array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108787#M22607</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="645292" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt; : Thanks for trying, but not quite what I was looking for.&amp;nbsp; My example apparently wasn't sufficiently clear.&amp;nbsp; Hopefully, the following example conveys the intent better:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have:&lt;BR /&gt;19 97 40 26&lt;BR /&gt;92 96 54 53&lt;BR /&gt;05 07 82 52&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Want Possiblity 1 (sorted by the bottom row's values):&lt;BR /&gt;19 97 26 40&lt;BR /&gt;92 96 53 54&lt;BR /&gt;05 07 52 82&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Want Possiblity 2 (sorted by the right most column's values):&lt;BR /&gt;19 97 40 26&lt;BR /&gt;05 07 82 52&lt;BR /&gt;92 96 54 53&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I know how to accomplish it with some macro code sorting related one-dimensional arrays, but was hoping sortn and sortc could handle it.&amp;nbsp; Thus far, the calls don't appear to have that functionality.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 29 Oct 2012 13:17:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108787#M22607</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-10-29T13:17:56Z</dc:date>
    </item>
    <item>
      <title>Re: How to use call sortn with a multidimensional array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108788#M22608</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Why not write it to a dataset and then use proc sort?&amp;nbsp; Would easily handle the second example.&amp;nbsp; To do the first just write it out by column instead of rows. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 29 Oct 2012 18:48:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108788#M22608</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2012-10-29T18:48:19Z</dc:date>
    </item>
    <item>
      <title>Re: How to use call sortn with a multidimensional array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108789#M22609</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Arthur.T ,&lt;/P&gt;&lt;P&gt;Oh. I do not think call sortn() can do this. call sortn() is only used to process an simple observation(e.g a record) , not manipulate a whole vector .For your purpose, the RETAIN statement is more suited.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Possibility 1:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data _null_;
array a{3,4} _temporary_ (19 97 40 26
&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; 92 96 54 53
&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; 05 07 82 52 ) ;
if a{1,3} gt a{1,4} then do;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp=a{1,4};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{1,4}=a{1,3};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{1,3}=temp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp=a{2,4};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{2,4}=a{2,3};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{2,3}=temp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp=a{3,4};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{3,4}=a{3,3};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{3,3}=temp;
end;


do i=1 to 3;
 do j=1 to 4;
&amp;nbsp; put a{i,j} 3. @;
 end;
 put / ;
end;
run;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Possibility 2:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data _null_;
array a{3,4} _temporary_ (19 97 40 26
&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; 92 96 54 53
&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; 05 07 82 52 ) ;
do i=1 to 3;
 do j=i+1 to 3;
&amp;nbsp; if a{i,4} gt a{j,4} then do;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp=a{j,4};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{j,4}=a{i,4};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{i,4}=temp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp=a{j,3};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{j,3}=a{i,3};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{i,3}=temp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp=a{j,2};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{j,2}=a{i,2};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{i,2}=temp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp=a{j,1};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{j,1}=a{i,1};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a{i,1}=temp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;
 end; 
end;


do i=1 to 3;
 do j=1 to 4;
&amp;nbsp; put a{i,j} 3. @;
 end;
 put / ;
end;
run;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 30 Oct 2012 03:19:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108789#M22609</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-10-30T03:19:20Z</dc:date>
    </item>
    <item>
      <title>Re: How to use call sortn with a multidimensional array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108790#M22610</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ksharp, not to pick on you. Although temporary array is automatically retained, but there is no 'retain statement' in either of your code like you suggested. &lt;img id="smileywink" class="emoticon emoticon-smileywink" src="https://communities.sas.com/i/smilies/16x16_smiley-wink.png" alt="Smiley Wink" title="Smiley Wink" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 30 Oct 2012 03:45:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108790#M22610</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-10-30T03:45:37Z</dc:date>
    </item>
    <item>
      <title>Re: How to use call sortn with a multidimensional array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108791#M22611</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yeah. What I mean is what TOM mean, using a dataset hold these data and use RETAIN statement to reorder these variables . I think it would be easier and better for this case.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 30 Oct 2012 05:24:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108791#M22611</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-10-30T05:24:49Z</dc:date>
    </item>
    <item>
      <title>Re: How to use call sortn with a multidimensional array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108792#M22612</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks to Tom and Ksharp.&amp;nbsp; I've marked this thread as 'assumed answered' as it appears that the answer is simply that call sortn and call sortc can't be used this way.&amp;nbsp; I'm going to stick with Paul Dorfman's macro for separating multidimensional arrays into a set of one dimensional arrays, sort the desired dimension, and shift the other arrays during the sorting process.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That approach was the most suitable in the present case as the array had to be created and sorted, on the fly, separately for each record.&amp;nbsp; Using retain, or re-writing the file and sorting it, added too many unnecessary complications.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 30 Oct 2012 13:14:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-use-call-sortn-with-a-multidimensional-array/m-p/108792#M22612</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-10-30T13:14:25Z</dc:date>
    </item>
  </channel>
</rss>

