Are you going to access all the arrays simultaneously, or do you want to process them one by one?
If you want to process them one-by-one, then this is BY-group processing, which you can accomplish in SAS/IML by using the UNIQUE-LOC technique:
proc iml;
data={ 10 12 15 20 -50 50 30 15 12 16 16 20 -20 70 40 18}`;
blocks={ 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 };
u = unique(blocks); /* 2. Unique values (levels) of categorical variable. */
s = j(1, ncol(u)); /* 3. Allocate vector to hold results */
do i = 1 to ncol(u); /* 4. For each level... */
idx = loc(blocks=u[i]); /* 5. Find observations in level */
X = data[idx];
/* now process these observations */
*print (sum(x));
end;
If you think you want to use separate matrices, X1, X2, ..., I advise you to rethink the problem. Although it is possible to do what you describe, in my experience (20+ years of IML programming), it is usually easier to deal with one matrix (rows of DATA, indexed by BLOCK) than to create a lot of matrices with separate names. In the recent versions of IML, you can use lists for this, but I recall from one of your previous posts that you are using an old version of SAS/IML that does not support lists.
Without lists, you would need to use programming tricks that are better avoided by someone who is new to the language.
Since you have posted multiple posts on the topic of designing experiments, I feel compelled to point out that SAS supports pre-written procedures to help you design experiments. For some examples, see Bilenas (2005) or Lawson's book (2010).
In addition, many people find that JMP software is an excellent tool for the design and analysis of experiments.
... View more