Orthogonal Arrays

Orthogonal Arrays

This Web Page Is Provided as a Service of SAS
and Is Managed by
Warren F. Kuhfeld
Advanced Analytics Division, SAS

SAS provides a catalog of over 117,000 orthogonal arrays. Orthogonal arrays are frequently used as plans for conducting experiments. This site provides:
    • a library of strength-two (main-effects only) orthogonal arrays,
    • lists and other information about orthogonal arrays,
    • a library of difference schemes,
    • tools for orthogonal array and efficient factorial design generation.

Every orthogonal array listed in Orthogonal Arrays (Hedayat, Sloane, and Stufken, 1999) ( can be found here along with many arrays that were not known in 1999 and many other larger arrays as well. Thanks to Don Anderson, Warwick DeLauney, Nam-Ky Nguyen, Shanqi Pang, Neil Sloane, Chung-yi Suen, Randy Tobias, J.C. Wang, and Yingshan Zhang who have all kindly helped with some of the arrays and difference schemes in this catalog. Please direct all questions about this site to Warren F. Kuhfeld.

Orthogonal array research is an active area today, and new arrays are being discovered all of the time. Also, there are some larger arrays that are known to exist, but are not included here. Most of the larger arrays are based on difference schemes, and there are a few that are currently not in the software. The orthogonal array construction code, with hundreds of methods implemented, is freely available on the web. Please contact me if you can help fill in any arrays that are not on this site or provide more elegant construction methods. This resource cannot continue to grow without your help. Click here to send me an email.

Click here to see a library of orthogonal arrays. This flat file contains virtually all known strength-two orthogonal array parents (except full-factorial designs) up to 143 runs and a few of the known parents in 144 runs. These arrays can be used to construct a wide variety of other arrays using the methods described with the orthogonal array lists. Note however that the SAS MktEx macro can automatically create these and many more orthogonal arrays.

Click here to see lists of orthogonal arrays. This PDF file has a list of virtually all known strength-two orthogonal arrays up through 143 runs, a list of parent orthogonal arrays (including virtually all known parent orthogonal arrays up through 143 runs and a reasonably comprehensive set of parent orthogonal arrays for 144 through 513 runs), and a reference list.

Neil Sloane's orthogonal array site ( provides many strength-two orthogonal arrays including some arrays that are alternatives to the ones shown here. This site also contains arrays of strength greater than two, assorted Hadamard constructions, many other useful designs not covered here, and information about the 1999 book Orthogonal Arrays by Hedayat, Sloane, and Stufken.

Nam-Ky Nguyen's site ( provides many near-orthogonal arrays made with his NOA tool.

SAS provides a set of free macros for making orthogonal arrays and D-efficient nonorthogonal designs. They are documented in the free book Marketing Research Methods in SAS. While the book features marketing research examples, these macros have been widely used to make factorial designs for many other application areas.
    • Click here for the general book and macro site.
    • Click here for a direct link to the macro documentation.
    • Click here for a direct link to the macros.
    • Click here for a direct link to the full 1309-page book.

The MktEx Macro for Efficient Factorial Designs

The MktEx macro (pronounced "Mark Tex") generates factorial experimental designs. The "Mkt" or "market" part of the name comes from the fact that it was originally designed with marketing researchers in mind. MktEx is just one in a series of Mkt macros. Some would only be used by marketing researchers and others doing choice modeling. Others, like MktEx, MktBIBD (balanced incomplete block design), MktBSize (balanced incomplete block design sizes), MktBal (balanced designs), MktOrth (orthogonal array catalog), and MktRuns (suggest number of runs), MktBlock (block a design), MktEval (evaluate a design), MktDups (check for duplicate runs), and MktLab (reassign levels and names), are of interest to a much larger audience. Marketing researchers have extremely interesting design requirements. They often need designs that are larger and more complicated than is typically required in other sciences. However, researchers in many other areas use MktEx every day to make designs for a variety of purposes. MktEx was developed for everyone who wants to make efficient designs, not just marketing researchers. This full-featured macro can easily handle simple problems like main-effects designs and more complicated problems including designs with interactions and designs with restrictions on which levels can appear together. Over 117,000 orthogonal arrays are available in its catalog. Efficient nonorthogonal designs are quickly and easily found. Here are some of the MktEx and other design macro capabilities:

• easy to use • Hadamard matrices • balanced designs
• efficient designs • Taguchi designs • any number of factors
• orthogonal arrays • main effects • up to 144-level factors
• nonorthogonal designs    • interactions • any mix of levels
• nearly orthogonal designs • blocking factors • level restrictions
• full-factorial designs • design diagnostics • general restrictions
• fractional-factorial designs    • design evaluations • ensure no duplicate profiles   
• tabled designs • automatic randomization    • partial profiles

MktEx and the other macros are documented here, they are free from here, and the entire book is available from here. The MktEx macro is free, however it requires the following SAS products in order to run: BASE, SAS/STAT, SAS/QC, and SAS/IML.

In this example, MktEx produces an orthogonal array with 1 two-level factor and 6 three-level factors in 18 runs:

   %mktex( 2 3 ** 6, n=18 )
This next example requests a nearly orthogonal design with 15 three-level factors in 36 runs. MktEx uses a combination of an orthogonal array and a computerized search algorithm to find an efficient design.
   %mktex( 3 ** 15, n=36, seed=17 )
This next example illustrates finding a design with restrictions and interactions. You can write a SAS macro that prevents certain level combinations from occuring together or defines any type of restriction that you want. MktEx can find designs with very complicated sets of restrictions. Here is an example with a simple set of restrictions.
   %macro resmac;
     avail = (x1 < 4) + (x2 < 4) + (x5 < 3) + (x6 < 3) + (x8 < 3);
     if (avail < 2) | (avail > 4) then bad = abs(avail - 3);
     else bad = 0;

   %mktex( 4 4 2 2 3 3 2 3, n=36, interact=x2*x3 x2*x4 x3*x4 x6*x7,
           restrictions=resmac, seed=104)
The user defines a badness function for MktEx to minimize. More details on this example are available starting on page 431 of Marketing Research Methods in SAS.

Hadamard Matrices That MktEx Can Make

Hadamard matrices are binary matrices, usually consisting of (1, -1) or (0, 1). Hadamard matrices are useful for making orthogonal arrays with two-level factors. MktEx can make Hadamard matrices for all of the following sizes up to 1000:

  2    4    8   12   16   20   24   28   32   36   40   44   48   52   56   60   64   68   72   76   80   84   88   92   96  100  104  108  112  116  120  124  128  132  136  140  144  148  152  156  160  164  168  172  176  180  184  188  192  196  200  204  208  212  216  220  224  228  232  236  240  244  248  252  256  260  264  268  272  276  280  284  288  292  296  300  304  308  312  316  320  324  328  332  336  340  344  348  352  356  360  364  368  372  376  380  384  388  392  396  400  404  408  412  416  420  424  428  432  436  440  444  448       456  460  464  468  472       480  484  488  492  496  500  504       512  516  520  524  528       536  540  544  548  552  556  560  564  568  572  576  580  584  588  592  596  600  604  608  612  616  620  624  628  632  636  640  644  648       656  660  664  ---  672  676  680  684  688  692  696  700  704  708  712  ---  720  724  728  732  736  740  744  748  752  756  760  ---  768       776  780  784  788  792  796  800  804  808  812  816  820  824  828  832       840  844  848       856  860  864  868  872       880  884  888  ---  896  900       908  912  916  920  924  928       936       944  948       ---  960       968  972  976       984       992      1000

It can make a number of larger Hadamard matrices as well. Every size up to 448 is in the list, with good but not complete coverage beyond that. The MktEx macro can construct these matrices when n is a multiple of 4 and one or more of the following hold:
    n ≤ 448 or n = 580, 596, 604, 612, 724, 732, 756, or 1060,
    n - 1 is prime,
    n / 2 - 1 is prime power and mod(n / 2, 4) = 2,
    n is a power of 2 (2, 4, 8, 16, ...) times the size of a smaller Hadamard matrix that is available.

Entries of "---" indicate sizes where there is currently no known construction method. Help in making the remaining Hadamard matrices would be welcome. The seed vectors for Williamson and other constructions can be found in MktEx. Other sources of Hadamard matrices on the web include the extensive site maintained by V.K. Gupta, A. Dhandapani, and Rajender Parsad (

Difference Schemes That MktEx Can Make

Click here to see a library of difference schemes and generalized Hadamard matrices. Difference schemes provide the building blocks from which many orthogonal arrays are constructed. Let D(λs, c, s) denote a difference scheme with λs rows and c columns with entries 0, 1, ..., s - 1. When c = λs, the difference scheme is square, and D(λs, λs, s) is called a generalized Hadamard matrix. MktEx can make the following difference schemes and generalized Hadamard matrices:

D(3,3,3)      D(6,6,3)      D(9,9,3)      D(12,12,3)    D(15,9,3)     D(18,18,3)    D(21,12,3)    D(24,24,3)    D(27,27,3)    D(30,30,3)    D(33,13,3)    D(36,36,3)    D(39,13,3)    D(42,21,3)    D(45,27,3)    D(48,48,3)    D(51,24,3)    D(54,54,3)    D(57,27,3)    D(60,30,3)    D(63,36,3)    D(66,30,3)    D(69,24,3)    D(72,72,3)    D(75,27,3)    D(78,30,3)    D(81,81,3)    D(84,42,3)    D(87,27,3)    D(90,90,3)    D(93,30,3)    D(96,96,3)    D(99,39,3)    D(102,48,3)   D(105,29,3)   D(108,108,3)  D(111,36,3)   D(114,30,3)   D(117,39,3)   D(120,48,3)   D(123,30,3)   D(126,72,3)   D(129,48,3)   D(132,132,3)  D(135,81,3)   D(138,48,3)   D(141,30,3)   D(144,144,3)  D(147,42,3)   D(150,150,3)  D(153,72,3)   D(156,48,3)   D(159,36,3)   D(162,162,3)  D(165,42,3)   D(168,84,3)   D(171,81,3)

D(4,4,4)      D(8,8,4)      D(12,12,4)    D(16,16,4)    D(20,10,4)    D(24,20,4)    D(28,12,4)    D(32,32,4)    D(36,36,4)    D(40,16,4)    D(44,12,4)    D(48,48,4)    D(52,16,4)    D(56,56,4)    D(60,20,4)    D(64,64,4)    D(68,32,4)    D(72,36,4)    D(76,16,4)    D(80,40,4)    D(84,36,4)    D(88,32,4)    D(92,36,4)    D(96,96,4)    D(100,36,4)   D(104,48,4)   D(108,108,4)  D(112,56,4)   D(116,36,4)   D(120,56,4)   D(124,20,4)   D(128,128,4)

D(5,5,5)      D(10,10,5)    D(15,8,5)     D(20,20,5)    D(25,25,5)    D(30,11,5)    D(35,10,5)    D(40,20,5)    D(45,20,5)    D(50,50,5)    D(55,11,5)    D(60,20,5)    D(65,20,5)    D(70,20,5)    D(75,40,5)    D(80,80,5)    D(85,20,5)    D(90,90,5)    D(95,20,5)    D(100,100,5)

D(6,2,6)      D(12,6,6)     D(18,2,6)     D(24,6,6)     D(30,2,6)     D(36,7,6)     D(42,2,6)     D(48,10,6)    D(54,2,6)     D(60,8,6)     D(66,2,6)     D(72,12,6)    D(78,2,6)     D(84,8,6)

D(7,7,7)      D(14,14,7)    D(21,9,7)     D(28,28,7)    D(35,9,7)     D(42,18,7)    D(49,49,7)    D(56,28,7)    D(63,14,7)    D(70,18,7)

D(8,8,8)      D(16,16,8)    D(24,8,8)     D(32,32,8)    D(40,10,8)    D(48,16,8)    D(56,56,8)    D(64,64,8)

D(9,9,9)      D(18,18,9)    D(27,27,9)    D(36,36,9)    D(45,18,9)    D(54,54,9)   

D(10,2,10)    D(20,5,10)    D(30,2,10)    D(40,6,10)    D(50,2,10)

D(11,11,11)   D(22,22,11)   D(33,11,11)   D(44,44,11)

D(12,6,12)    D(24,6,12)    D(36,6,12)

D(13,13,13)   D(26,26,13)

D(14,2,14)    D(28,5,14)

D(15,5,15)    D(30,5,15)

D(16,16,16)   D(32,32,16)







Difference Schemes That MktEx Cannot Make

There are a few larger arrays that should be included in MktEx for completeness, but they rely on obscure difference schemes. MktEx still needs the following difference schemes:

D(60,36,3)   D(102,51,3) 
D(60,21,4)   D(112,64,4) 
D(30,15,5)   D(35,17,5)   D(40,25,5)   D(55,17,5)   D(60,25,5)   D(65,25,5)   D(85,35,5)  
D(60,11,6)   D(84,16,6)  
D(35,11,7)   D(63,28,7)  

If you can help with any of these or any other difference scheme that is not in the list above, please contact me. Click here to send me an email. Your contribution will be acknowledged on this site and in the next edition of the Marketing Research book. All orthogonal arrays and difference schemes contributed to this site may be freely used. Before contributing, please ensure that your contribution has no restrictions on such use.