<?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: array 2 dimension from dataset in New SAS User</title>
    <link>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577223#M13166</link>
    <description>&lt;P&gt;It is what IML is supposed to do. You need SAS/IML .&lt;/P&gt;
&lt;P&gt;If you have any MATRIX problem . post it at IML forum. Rick is there.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs truncover;
input age	f2	f3	f4	f5	f6 ;
cards;
40	11	15	5	9	14
41	15	8	51	56	12
42	25	7	5	10	5
43	3	16	66	71	32
44	55	181	23	28	12
45	1	184	12	17	1
;

proc iml;
use have;
read all var{age};
read all var{f2	f3	f4	f5	f6} into val[c=col];
close;
row='age'+strip(char(age));
mattrib val r=row c=col;

temp=val['age40','f3'];
print temp;	

temp=val['age44','f5'];
print temp;

quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Sun, 28 Jul 2019 12:24:33 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2019-07-28T12:24:33Z</dc:date>
    <item>
      <title>array 2 dimension from dataset</title>
      <link>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577215#M13163</link>
      <description>&lt;P&gt;hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I&amp;nbsp;have a dataset that contains an age (40-105) &amp;nbsp;variable and another f2-f49 variables &amp;nbsp;representing values for each age .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;sample:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;age&lt;/TD&gt;&lt;TD&gt;f2&lt;/TD&gt;&lt;TD&gt;f3&lt;/TD&gt;&lt;TD&gt;f4&lt;/TD&gt;&lt;TD&gt;f5&lt;/TD&gt;&lt;TD&gt;f6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;40&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;14&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;41&lt;/TD&gt;&lt;TD&gt;15&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;51&lt;/TD&gt;&lt;TD&gt;56&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;42&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;43&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;16&lt;/TD&gt;&lt;TD&gt;66&lt;/TD&gt;&lt;TD&gt;71&lt;/TD&gt;&lt;TD&gt;32&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;44&lt;/TD&gt;&lt;TD&gt;55&lt;/TD&gt;&lt;TD&gt;181&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;28&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;184&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;17&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;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;i would like to create 2 DIMENSION array -&lt;STRONG&gt; val&lt;/STRONG&gt; - &amp;nbsp;that will contain the values in file.&lt;/P&gt;&lt;P&gt;so that later in the program, i will be able to refer to a spesifc age and f and get the value.&lt;/P&gt;&lt;P&gt;like :&lt;/P&gt;&lt;P&gt;val (40,3) = 15&lt;/P&gt;&lt;P&gt;val (44,5) = 28&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;thanks for answering&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;miri.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&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>Sun, 28 Jul 2019 07:54:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577215#M13163</guid>
      <dc:creator>mirib</dc:creator>
      <dc:date>2019-07-28T07:54:21Z</dc:date>
    </item>
    <item>
      <title>Re: array 2 dimension from dataset</title>
      <link>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577216#M13164</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;array val {40:45,2:49};
do age = 40 to 45;
  set have;
  array f{2:49} f2-f49;
  do xf = 2 to 49;
    val{age,xf} = f{xf};
  end;
end;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 28 Jul 2019 08:11:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577216#M13164</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-07-28T08:11:04Z</dc:date>
    </item>
    <item>
      <title>Re: array 2 dimension from dataset</title>
      <link>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577223#M13166</link>
      <description>&lt;P&gt;It is what IML is supposed to do. You need SAS/IML .&lt;/P&gt;
&lt;P&gt;If you have any MATRIX problem . post it at IML forum. Rick is there.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs truncover;
input age	f2	f3	f4	f5	f6 ;
cards;
40	11	15	5	9	14
41	15	8	51	56	12
42	25	7	5	10	5
43	3	16	66	71	32
44	55	181	23	28	12
45	1	184	12	17	1
;

proc iml;
use have;
read all var{age};
read all var{f2	f3	f4	f5	f6} into val[c=col];
close;
row='age'+strip(char(age));
mattrib val r=row c=col;

temp=val['age40','f3'];
print temp;	

temp=val['age44','f5'];
print temp;

quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 28 Jul 2019 12:24:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577223#M13166</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2019-07-28T12:24:33Z</dc:date>
    </item>
    <item>
      <title>Re: array 2 dimension from dataset</title>
      <link>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577411#M13200</link>
      <description>&lt;P&gt;&lt;FONT color="#FF00FF"&gt;EDITED: THIS HAS BEEN REVISED FOR GENERAL PURPOSE. SEE THE NEXT POST OF MINE&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You want to lookup an array giving its row and column to get its content. It can be done via Hash objects and arrays. Arrays are preferable because it is faster and takes less memory. I am using a temporary 2-dimensional array for not crowding the PDV, Also, I am using macro variables to make the array dynamic.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
%let start_row = 40;
%let end_row = 45;
%let start_col = 2;
%let end_col = 6;
data _null_;
   /** Load the 2-dimensional  Array **/
   if _n_ = 1 then do until(eof);
      set have end = eof;
      array ind[&amp;amp;start_row:&amp;amp;end_row, &amp;amp;start_col:&amp;amp;end_col] _temporary_;
      array f f&amp;amp;start_col - f&amp;amp;end_col;
      row = age;
      do i = &amp;amp;start_col to &amp;amp;end_col;
         col = input(compress(vname(f[i-1]),,'kd'),8.);
         ind[row,col] = f[i-1];
         *put row = col = ind[row, col] =;
      end;
   end;
   /** Lookup the Array **/
   do age = 42, 40, 45;
      do i = 5, 2, 6, 3;
         put ind[age, i] =;
      end;
      put '==================================';
   end;
stop;
run;&lt;/CODE&gt;&lt;/PRE&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>Mon, 29 Jul 2019 17:32:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577411#M13200</guid>
      <dc:creator>KachiM</dc:creator>
      <dc:date>2019-07-29T17:32:11Z</dc:date>
    </item>
    <item>
      <title>Re: array 2 dimension from dataset</title>
      <link>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577454#M13214</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/283113"&gt;@mirib&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You would have received my reply now.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;After posting it, I realized that the code is not generalized. It will work if you arrange the columns as&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;array f f&amp;amp;start_col - f&amp;amp;end_col;&lt;/PRE&gt;
&lt;P&gt;where &amp;amp;start_col has to be always 2 and &amp;amp;end_col has to be 6. What if you want:&lt;/P&gt;
&lt;PRE&gt;input age  f4 - f8;&lt;/PRE&gt;
&lt;P&gt;instead of&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;input age  f2 f3 f4 f5 f6;&lt;/PRE&gt;
&lt;P&gt;A small correction to the previous code is made which takes care of any starting and ending column names ( they have to be contiguous in between):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
infile cards expandtabs truncover;
input age  f4 - f8;
cards;
40 11 15 5  9  14
41 15 8  51 56 12
42 25 7  5  10 5
43 3  16 66 71 32
44 55 181   23 28 12
45 1  184   12 17 1
;
run;

%let start_row = 40;
%let end_row = 45;
%let start_col = 4;
%let end_col = 8;
data _null_;
   /** Load the 2-dimensional  Array **/
   if _n_ = 1 then do until(eof);
      set have end = eof;
      array ind[&amp;amp;start_row:&amp;amp;end_row, &amp;amp;start_col:&amp;amp;end_col] _temporary_;
      array f[&amp;amp;start_col:&amp;amp;end_col] f&amp;amp;start_col - f&amp;amp;end_col;
      row = age;
      do i = &amp;amp;start_col to &amp;amp;end_col;
         col = input(compress(vname(f[i]),,'kd'),8.);
         ind[row,col] = f[i];
         *put row = col = ind[row, col] =;
      end;
   end;
   /** Lookup the Array **/
   do age = 42, 40;
      do i = 5, 4, 6;
         put ind[age, i] =;
      end;
      put '==================================';
   end;
stop;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 29 Jul 2019 17:29:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/array-2-dimension-from-dataset/m-p/577454#M13214</guid>
      <dc:creator>KachiM</dc:creator>
      <dc:date>2019-07-29T17:29:02Z</dc:date>
    </item>
  </channel>
</rss>

