12.2 - Two-way and N-way Tables
12.2 - Two-way and N-way TablesSo far, we have only used the FREQ procedure to create one-way frequency tables. However, it is often helpful to create crosstabulation tables in which the frequencies are determined for more than one variable at a time. For example, if we were interested in knowing how the percentage of voters favoring Barack Obama differs for various age groups, we'd need to create a two-way crosstabulation table between the two categorical variables candidate (Obama, McCain) and agegroup (18-29, 30-44, 45-54, 55-70, more than 70). We'll investigate such tables in this section.
Example 12.6
The following FREQ procedure illustrates the simplest example of telling SAS to create a two-way table, for the variables sex and ed_level, with no bells and whistles added:
PROC FREQ data=icdb.back;
title 'Crosstabulation of Education Level and Sex';
tables ed_level*sex;
RUN;
|
---|
Table of ed_level by sex | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ed_level | sex | ||||||||||||||
1 | 2 | Total | |||||||||||||
1 |
|
|
| ||||||||||||
2 |
|
|
| ||||||||||||
3 |
|
|
| ||||||||||||
4 |
|
|
| ||||||||||||
5 |
|
|
| ||||||||||||
Total |
|
|
|
As you can see, to tell SAS to create a two-way table of ed_level and sex, we merely use an asterisk (*) to join the two variables in the TABLES statement.
Launch and run the SAS program. Review the output to convince yourself that SAS created the requested two-way table. In general, the values of the variable appearing before the asterisk form the rows of the table, and the values of the variable appearing after the asterisk form the columns of the table. In this case, since ed_level appears before the asterisk in the TABLES statement, its values form the rows of the table. And, since sex appears after the asterisk, its values form the columns of the table.
When SAS creates two-way tables, each cell of the table contains, by default, the cell frequency, the cell percentage of the total frequency, the cell percentage of the row frequency, and the cell percentage of the column frequency. You might want to review the numbers in each of the cells of the table to make sure you understand what is what. In the upper left-hand corner of the table, SAS always prints a guide to the numbers appearing in each of the cells in the table. Here, SAS tells us that the first number in cell (i,j) is the number of subjects of ed_level i and sex j; the second number in cell (i,j) is the percentage of subjects of ed_level i and sex j; the third number in cell (i,j) is the percentage of subjects who are sex j given that they are ed_level i; and the fourth number in cell (i,j) is the percentage of subjects who are ed_level i given that they are sex j. For example, for the cell in which ed_level = 4 and sex = 2, SAS tells us that: 229 of the subjects in the data set are ed_level 4 and sex 2; 35.89% of the subjects in the data set are ed_level 4 and sex 2; 91.97% of the subjects in the data set who are ed_level 4 are sex 2; and 39.35% of the subjects in the data set who are sex 2 are ed_level 4.
A little note about shortcuts. If you have many different two-way tables to create, you can use a variety of shortcuts. For example, the TABLES statement:
tables a*(b c);
tells SAS to create a two-way table between variables a and b (a*b) and a two-way table between variables a and c (a*c). The TABLES statement:
tables (a b)*(c d);
tells SAS to create four two-way tables, namely: a*c, b*c, a*d, and b*d. The TABLES statement:
tables (a b c)*d;
tells SAS to create three two-way tables, namely: a*d, b*d, and c*d.
Example 12.7
For a frequency analysis of more than two variables, we can use the FREQ procedure to create n-way crosstabulation tables. In that case, a series of two-way tables is created, with a table for each level of the other variable(s). The following program creates a three-way table of sex, job_chng, and ed_level:
PROC FREQ data=icdb.back;
title '3-way Table of Sex, Job Change, and Ed. Level';
tables sex*job_chng*ed_level;
RUN;
As you can see, to tell SAS to create a three-way table of sex, job_chng, and ed_level, we use an asterisk (*) to join the three variables in the TABLES statement. The order of the variables is important. In n-way tables, the last two variables of the TABLES statement become the rows and columns of the two-way tables. Variables that precede the last two variables in the TABLES statement stratify the crosstabulation tables. So, in this case, we should expect SAS to create two two-way tables of job_chng and ed_level, one for when sex = 1 and one for when sex = 2.
Launch and run the SAS program, and review the output to convince yourself that SAS created the three-way table as described. You should see that, indeed, SAS created one two-way table of job_chng and ed_level for when sex = 1:
Frequency | ||||||
---|---|---|---|---|---|---|
Percent | ||||||
Row Pct | ||||||
Col Pct | 1 | 2 | 3 | 4 | 5 | Total |
0 | 4 | 6 | 11 | 15 | 12 | 48 |
7.84 | 11.76 | 21.57 | 29.41 | 23.53 | 94.12 | |
8.33 | 12.50 | 22.92 | 31.25 | 25.00 | ||
100.00 | 100.00 | 100.00 | 88.24 | 92.31 | ||
1 | 0 | 0 | 0 | 2 | 1 | 3 |
0.00 | 0.00 | 0.00 | 3.92 | 1.96 | 5.88 | |
0.00 | 0.00 | 0.00 | 66.67 | 33.33 | ||
0.00 | 0.00 | 0.00 | 11.76 | 7.69 | ||
Total | 4 | 6 | 11 | 17 | 13 | 51 |
7.84 | 11.76 | 21.57 | 33.33 | 25.49 | 100.00 |
Frequency Missing = 107
and one two-way table of job_chng and ed_level for when sex = 2:
Frequency | ||||||
---|---|---|---|---|---|---|
Percent | ||||||
Row Pct | ||||||
Col Pct | 1 | 2 | 3 | 4 | 5 | Total |
0 | 4 | 14 | 148 | 163 | 74 | 403 |
0.84 | 2.95 | 31.16 | 34.32 | 15.58 | 84.84 | |
0.99 | 3.47 | 36.72 | 40.45 | 18.36 | ||
80.00 | 82.35 | 85.06 | 83.16 | 89.16 | ||
1 | 1 | 3 | 26 | 33 | 9 | 72 |
0.21 | 0.63 | 5.47 | 6.95 | 1.89 | 15.16 | |
1.39 | 4.17 | 36.11 | 45.83 | 12.50 | ||
20.00 | 17.65 | 14.94 | 16.84 | 10.84 | ||
Total | 5 | 17 | 174 | 196 | 83 | 475 |
1.05 | 3.58 | 36.63 | 41.26 | 17.47 | 100.00 |
Frequency Missing = 107
It probably goes without saying that, in general, n-way tables can generate lots of output.