<?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: Transform data format to accommodate Proc expectations in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126335#M34692</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK. Here is .&lt;/P&gt;&lt;P&gt;I am afraid that I will be blamed by Dr &lt;SPAN class="j-post-author "&gt;&lt;STRONG&gt;&lt;A _jive_internal="true" class="jiveTT-hover-user jive-username-link" data-avatarid="1066" data-externalid="" data-presence="null" data-userid="455729" data-username="SteveDenham" href="https://communities.sas.com/people/SteveDenham" id="jive-45572967980374941039803"&gt;SteveDenham&lt;/A&gt;&lt;/STRONG&gt;&lt;/SPAN&gt; .&lt;/P&gt;&lt;P&gt;I should not spoon feed .&lt;/P&gt;&lt;P&gt;If you are familiar with PCA, it should be easy to do it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data input;
input rank (race1-race3) ($) ;
cards;
1 D E D
2 A D B
3 E . A
4 C B C
5 B C .
;
run;

data _null_;
 if _n_ eq 1 then do;
&amp;nbsp;&amp;nbsp; length order1 - order3 8 k $ 8;
&amp;nbsp;&amp;nbsp; declare hash ha(ordered:'y');
&amp;nbsp;&amp;nbsp;&amp;nbsp; ha.definekey('k');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ha.definedata('k','order1','order2','order3');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ha.definedone();
 end;
set input end=last;
array o{3} order1-order3 ;
array r{3} race1-race3 ;
do i=1 to dim(r);
 if not missing(r{i}) then do;
&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; k=r{i};
&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; rc=ha.find();
&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; o{i}=rank;
&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; ha.replace();
&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; call missing(of order:);
&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; end;
end;
if last then ha.output(dataset:'bballm');
run;

proc means data=bballm noprint;
&amp;nbsp;&amp;nbsp; output out=maxrank
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max=morder1 morder2 morder3&amp;nbsp; ;
run;

data bball;
&amp;nbsp;&amp;nbsp; set bballm;
&amp;nbsp;&amp;nbsp; if _n_=1 then set maxrank;
&amp;nbsp;&amp;nbsp; array services[3] order1-order3;
&amp;nbsp;&amp;nbsp; array maxranks[3] morder1-morder3 ;
&amp;nbsp;&amp;nbsp; keep k order1-order3 ;
&amp;nbsp;&amp;nbsp; do i=1 to 3 ;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if services&lt;I&gt;=. then services&lt;I&gt;=maxranks&lt;I&gt;+1;
&amp;nbsp;&amp;nbsp; end;
run;

ods graphics on;

proc prinqual data=bball out=tbball scores n=1 tstandard=z
&amp;nbsp;&amp;nbsp; plots=transformations;
&amp;nbsp;&amp;nbsp; transform untie(order1-order3);
&amp;nbsp;&amp;nbsp; id k ;
run;

* Perform the Final Principal Component Analysis;
proc factor nfactors=1 plots=scree;
&amp;nbsp;&amp;nbsp; ods select factorpattern screeplot;
&amp;nbsp;&amp;nbsp; var Torder1-Torder3 ;
run;

proc sort;
&amp;nbsp;&amp;nbsp; by Prin1;
run;

* Display Scores on the First Principal Component;
proc print;
&amp;nbsp;&amp;nbsp; var k Prin1;
run;

&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&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;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 02 May 2013 12:18:34 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2013-05-02T12:18:34Z</dc:date>
    <item>
      <title>Transform data format to accommodate Proc expectations</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126328#M34685</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Suppose we are faced with results of 100 races by 100 runners.&amp;nbsp; Consider a &lt;STRONG&gt;subset&lt;/STRONG&gt; of the results in the following spreadsheet:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Order Finished&lt;/TD&gt;&lt;TD&gt;Race 1&lt;/TD&gt;&lt;TD&gt;Race 2&lt;/TD&gt;&lt;TD&gt;Race 3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;TD&gt;E&lt;/TD&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;E&lt;/TD&gt;&lt;TD&gt;*&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;*&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A SAS procedure I'm trying to use shows an example with the data in a &lt;STRONG&gt;different&lt;/STRONG&gt; form, as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Runner&lt;/TD&gt;&lt;TD&gt;Order_1&lt;/TD&gt;&lt;TD&gt;Order_2&lt;/TD&gt;&lt;TD&gt;Order 3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;*&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;E&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;*&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As can be seen, some runners miss certain races.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The above transformation was easy enough to do manually.&amp;nbsp; But 100 x 100 is another story.&amp;nbsp; Could one of you please help with the SAS code that will transform from the first format to the second?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your help will be greatly appreciated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;By the way, the SAS example I am attempting to replicate using my data set is the following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Example 74.2 Principal Components of Basketball Rankings&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/statug/65328/HTML/default/viewer.htm#statug_prinqual_examples02.htm" title="http://support.sas.com/documentation/cdl/en/statug/65328/HTML/default/viewer.htm#statug_prinqual_examples02.htm"&gt;SAS/STAT(R) 12.1 User's Guide&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks much!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Nicholas Kormanik&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 May 2013 01:03:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126328#M34685</guid>
      <dc:creator>NKormanik</dc:creator>
      <dc:date>2013-05-01T01:03:00Z</dc:date>
    </item>
    <item>
      <title>Re: Transform data format to accommodate Proc expectations</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126329#M34686</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Use this :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; &lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;data input;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;input rank (race_1-race_3) ($) ;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;cards;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;1 D E D&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;2 A D B&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;3 E * A&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;4 C B C&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;5 B C *&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt;"&gt; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt;"&gt;data list;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;set input;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;array r race_:;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;do race = 1 to dim(r);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name = r{race};&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if anyalpha(name) then output;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;drop race_:;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt;"&gt; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt;"&gt;proc sort data=list; by name race; run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt;"&gt; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt;"&gt;proc transpose data=list out=want(drop=_name_) prefix=Order_;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;by name;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;var rank;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;id race;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt;"&gt; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt;"&gt;option missing=*;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;proc print data=want noobs; var name order_1-order_3; run;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG style="font-size: 12pt;"&gt;option missing=.;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 May 2013 01:58:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126329#M34686</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2013-05-01T01:58:05Z</dc:date>
    </item>
    <item>
      <title>Re: Transform data format to accommodate Proc expectations</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126330#M34687</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Outstanding, &lt;A __default_attr="2746" __jive_macro_name="user" class="jive_macro jive_macro_user" href="https://communities.sas.com/" modifiedtitle="true" title="PGStats"&gt;&lt;/A&gt;, masterfully done.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'd never have gotten it on my own.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 May 2013 05:27:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126330#M34687</guid>
      <dc:creator>NKormanik</dc:creator>
      <dc:date>2013-05-01T05:27:20Z</dc:date>
    </item>
    <item>
      <title>Re: Transform data format to accommodate Proc expectations</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126331#M34688</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Indeed, your solution not only precise, but also intuitive. FWIW, here is a hash() approach (I know, I know, it is awful. Hey, Ksharp is online, hopefully he will come up a better Hash solution):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data input;&lt;/P&gt;&lt;P&gt;input rank (race_1-race_3) ($) ;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1 D E D&lt;/P&gt;&lt;P&gt;2 A D B&lt;/P&gt;&lt;P&gt;3 E * A&lt;/P&gt;&lt;P&gt;4 C B C&lt;/P&gt;&lt;P&gt;5 B C *&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;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call symputx('obs',nobs);&lt;/P&gt;&lt;P&gt;&amp;nbsp; stop;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set input nobs=nobs;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc transpose data=input out=have1;&lt;/P&gt;&lt;P&gt;var _all_;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call symputx('var',nobs-1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; stop;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have1 nobs=nobs;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;%put &amp;amp;var &amp;amp;obs;&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; dcl hash hoh();&lt;/P&gt;&lt;P&gt;&amp;nbsp; dcl hiter hih('hoh');&lt;/P&gt;&lt;P&gt;&amp;nbsp; hoh.definekey('_NAME_');&lt;/P&gt;&lt;P&gt;&amp;nbsp; hoh.definedata('_name_', 'hh');&lt;/P&gt;&lt;P&gt;&amp;nbsp; hoh.definedone();&lt;/P&gt;&lt;P&gt;&amp;nbsp; dcl hash hh();&lt;/P&gt;&lt;P&gt;&amp;nbsp; length player col: rank $8.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do _n_=1 by 1 until (last);&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; set have1 end=last;&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; array col(&amp;amp;obs);&lt;/P&gt;&lt;P&gt;&amp;nbsp; array _rank(&amp;amp;var) $8.;&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; array t(&amp;amp;obs) $8. _temporary_;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_ &amp;gt;1 and hoh.find() ne 0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hh=_new_ hash(ordered: 'a');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hh.definekey ('player');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hh.definedata('rank', 'player');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hh.definedone();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hoh.replace();&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&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; if _n_=1 then do i=1 to &amp;amp;obs.;&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; t(i)=left(col(i));&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else do i=1 to &amp;amp;obs.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; rank=t(i);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; player=col(i);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; hh.replace();&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do until (last1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set input (keep=race_1) end=last1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc=hih.first(); i=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do rc=0 by 0 while (rc=0);&lt;/P&gt;&lt;P&gt;&amp;nbsp; i+1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if hh.find(key: race_1)=0 then _rank(i)=rank;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else _rank(i)='*';&lt;/P&gt;&lt;P&gt;&amp;nbsp; rc=hih.next();&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; stop;&lt;/P&gt;&lt;P&gt;&amp;nbsp; keep player _r:;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 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, 02 May 2013 03:13:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126331#M34688</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2013-05-02T03:13:05Z</dc:date>
    </item>
    <item>
      <title>Re: Transform data format to accommodate Proc expectations</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126332#M34689</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Haikuo,&lt;/P&gt;&lt;P&gt;I think PG's method is good enough. Hash Table has its advantage when a large data .&lt;/P&gt;&lt;P&gt;Under this situation , PG is good, If You let me write, I also the code like PG.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;See you later.&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 02 May 2013 03:29:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126332#M34689</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2013-05-02T03:29:08Z</dc:date>
    </item>
    <item>
      <title>Re: Transform data format to accommodate Proc expectations</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126333#M34690</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ha. HaiKuo,&lt;/P&gt;&lt;P&gt;Here is :&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;PRE&gt;data input;
input rank (race1-race3) ($) ;
cards;
1 D E D
2 A D B
3 E . A
4 C B C
5 B C .
;
run;
options missing='*';
data _null_;
 if _n_ eq 1 then do;
&amp;nbsp;&amp;nbsp; length order1 - order3 8 k $ 8;
&amp;nbsp;&amp;nbsp; declare hash ha(ordered:'y');
&amp;nbsp;&amp;nbsp;&amp;nbsp; ha.definekey('k');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ha.definedata('k','order1','order2','order3');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ha.definedone();
 end;
set input end=last;
array o{3} order1-order3 ;
array r{3} race1-race3 ;
do i=1 to dim(r);
 if not missing(r{i}) then do;
&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; k=r{i};
&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; rc=ha.find();
&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; o{i}=rank;
&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; ha.replace();
&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; call missing(of order:);
&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;end;
end;
if last then ha.output(dataset:'want');
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>Thu, 02 May 2013 04:36:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126333#M34690</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2013-05-02T04:36:19Z</dc:date>
    </item>
    <item>
      <title>Re: Transform data format to accommodate Proc expectations</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126334#M34691</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" href="https://communities.sas.com/"&gt;&lt;/A&gt;&amp;nbsp; I'm glad for this addition by &lt;A __default_attr="5068" __jive_macro_name="user" class="jive_macro jive_macro_user" href="https://communities.sas.com/"&gt;&lt;/A&gt;, as the actual data sets I'm dealing with are pretty large.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So if the second version of transform given here is better suited to larger data sets, I'll use it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now I need that mentioned example translated, using this present data set created....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;Example 74.2 Principal Components of Basketball Rankings&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;A class="jive-link-external-small" href="http://support.sas.com/documentation/cdl/en/statug/65328/HTML/default/viewer.htm#statug_prinqual_examples02.htm" style="font-style: inherit; font-family: inherit; color: #0e66ba;"&gt;SAS/STAT(R) 12.1 User's Guide&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;Thanks much!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 02 May 2013 06:09:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126334#M34691</guid>
      <dc:creator>NKormanik</dc:creator>
      <dc:date>2013-05-02T06:09:39Z</dc:date>
    </item>
    <item>
      <title>Re: Transform data format to accommodate Proc expectations</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126335#M34692</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK. Here is .&lt;/P&gt;&lt;P&gt;I am afraid that I will be blamed by Dr &lt;SPAN class="j-post-author "&gt;&lt;STRONG&gt;&lt;A _jive_internal="true" class="jiveTT-hover-user jive-username-link" data-avatarid="1066" data-externalid="" data-presence="null" data-userid="455729" data-username="SteveDenham" href="https://communities.sas.com/people/SteveDenham" id="jive-45572967980374941039803"&gt;SteveDenham&lt;/A&gt;&lt;/STRONG&gt;&lt;/SPAN&gt; .&lt;/P&gt;&lt;P&gt;I should not spoon feed .&lt;/P&gt;&lt;P&gt;If you are familiar with PCA, it should be easy to do it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data input;
input rank (race1-race3) ($) ;
cards;
1 D E D
2 A D B
3 E . A
4 C B C
5 B C .
;
run;

data _null_;
 if _n_ eq 1 then do;
&amp;nbsp;&amp;nbsp; length order1 - order3 8 k $ 8;
&amp;nbsp;&amp;nbsp; declare hash ha(ordered:'y');
&amp;nbsp;&amp;nbsp;&amp;nbsp; ha.definekey('k');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ha.definedata('k','order1','order2','order3');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ha.definedone();
 end;
set input end=last;
array o{3} order1-order3 ;
array r{3} race1-race3 ;
do i=1 to dim(r);
 if not missing(r{i}) then do;
&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; k=r{i};
&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; rc=ha.find();
&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; o{i}=rank;
&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; ha.replace();
&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; call missing(of order:);
&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; end;
end;
if last then ha.output(dataset:'bballm');
run;

proc means data=bballm noprint;
&amp;nbsp;&amp;nbsp; output out=maxrank
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max=morder1 morder2 morder3&amp;nbsp; ;
run;

data bball;
&amp;nbsp;&amp;nbsp; set bballm;
&amp;nbsp;&amp;nbsp; if _n_=1 then set maxrank;
&amp;nbsp;&amp;nbsp; array services[3] order1-order3;
&amp;nbsp;&amp;nbsp; array maxranks[3] morder1-morder3 ;
&amp;nbsp;&amp;nbsp; keep k order1-order3 ;
&amp;nbsp;&amp;nbsp; do i=1 to 3 ;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if services&lt;I&gt;=. then services&lt;I&gt;=maxranks&lt;I&gt;+1;
&amp;nbsp;&amp;nbsp; end;
run;

ods graphics on;

proc prinqual data=bball out=tbball scores n=1 tstandard=z
&amp;nbsp;&amp;nbsp; plots=transformations;
&amp;nbsp;&amp;nbsp; transform untie(order1-order3);
&amp;nbsp;&amp;nbsp; id k ;
run;

* Perform the Final Principal Component Analysis;
proc factor nfactors=1 plots=scree;
&amp;nbsp;&amp;nbsp; ods select factorpattern screeplot;
&amp;nbsp;&amp;nbsp; var Torder1-Torder3 ;
run;

proc sort;
&amp;nbsp;&amp;nbsp; by Prin1;
run;

* Display Scores on the First Principal Component;
proc print;
&amp;nbsp;&amp;nbsp; var k Prin1;
run;

&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&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;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 02 May 2013 12:18:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126335#M34692</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2013-05-02T12:18:34Z</dc:date>
    </item>
    <item>
      <title>Re: Transform data format to accommodate Proc expectations</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126336#M34693</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Bravo! This is ingenious! Very Happy to learn! Thank you!&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, 02 May 2013 13:15:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126336#M34693</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2013-05-02T13:15:37Z</dc:date>
    </item>
    <item>
      <title>Re: Transform data format to accommodate Proc expectations</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126337#M34694</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" href="https://communities.sas.com/"&gt;&lt;/A&gt;&amp;nbsp; I'm sure glad you translated that mini-monster.&amp;nbsp; The results are quite interesting:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Runner&lt;/TD&gt;&lt;TD&gt;Principal Component 1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;D&lt;/TD&gt;&lt;TD&gt;-2.69500&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;E&lt;/TD&gt;&lt;TD&gt;-0.19243&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;0.75650&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;1.06547&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;1.06547&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Assuming correct translation, and correct methodology, this PCA approach solves a tie issue between D and E (that resulted in a simpler form of solution script).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also, if the PC loading values have meaning (good question for &lt;A __default_attr="455729" __jive_macro_name="user" class="jive_macro jive_macro_user" href="https://communities.sas.com/"&gt;&lt;/A&gt;), I suppose we could say the tie between D and E wasn't even close.&amp;nbsp; Whereas the performance of B and C is very close.&amp;nbsp; Too, some clustering is possible, eye-balling, or using one of SAS clustering procedures.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks much for your help here!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I still need to convert your script to accommodate my 100x100 data sets, so the work is far from over.&amp;nbsp; I may have to come back and ask for more help in doing that.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 03 May 2013 06:40:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Transform-data-format-to-accommodate-Proc-expectations/m-p/126337#M34694</guid>
      <dc:creator>NKormanik</dc:creator>
      <dc:date>2013-05-03T06:40:45Z</dc:date>
    </item>
  </channel>
</rss>

