SUGI 27 Beginning Tutorials
SAS® Software provides hundreds of ways you can ana- lyze your data. You can use the DATA step to slice and dice your data, and there are dozens of procedures that will process your data and produce all kinds of statistics. But odds are that no matter how you organize and analyze your data, you’ll end up producing a report in the form of a table.
This is why every SAS user needs to know how to use PROC TABULATE. While TABULATE doesn’t do any- thing that you can’t do with other PROCs, the payoff is in the output. TABULATE computes a variety of statistics, and it neatly packages the results in a single table.
Unfortunately, TABULATE has gotten a bad rap as being a difficult procedure to learn. This paper will prove that if you take things step by step, anyone can learn PROC TABULATE.
Copyright By PowCoder代写 加微信 powcoder
This paper is based on Version 8, but all of the examples save the last one will also work in Version 6.
INTRODUCTION
This paper will start out with the most basic one- dimensional table. We will then go on to two-dimensional tables, tables with totals, and finally, three-dimensional tables. By the end of this paper, you will be ready to build most basic TABULATE tables.
ONE-DIMENSIONAL TABLES
To really understand TABULATE, you have to start very simply. The simplest possible table in TABULATE has to have three things: a PROC TABULATE statement, a TABLE statement, and a CLASS or VAR statement. In this example, we will use a VAR statement. Later exam- ples will show the CLASS statement.
The PROC TABULATE statement looks like this:
PROC TABULATE DATA=TEMP;
The second part of the procedure is the TABLE statement. It describes which variables to use and how to arrange the variables. This first table will have only one variable, so you don’t have to tell TABULATE where to put it. All you have to do is list it in the TABLE statement. When there is only one variable, you get a one-dimensional ta- ble.
PROC TABULATE DATA=TEMP;
TABLE RENT;
If you run this code as is, you will get an error message because TABULATE can’t figure out whether the vari- able RENT is intended as an analysis variable, which is used to compute statistics, or a classification variable, which is used to define categories in the table.
In this case, we want to use rent as the analysis variable. We will be using it to compute a statistic. To tell TABULATE that RENT is an analysis variable, you use a VAR statement. The syntax of a VAR statement is sim- ple: you just list the variables that will be used for analy- sis. So now the syntax for our PROC TABULATE is:
PROC TABULATE DATA=TEMP;
TABLE RENT;
The result is the table shown below. It has a single col- umn, with the header RENT to identify the variable, and the header SUM to identify the statistic. There is just a single table cell, which contains the value for the sum of RENT for all of the observations in the dataset TEMP.
„ƒƒƒƒƒƒƒƒƒƒƒƒ† ‚ Rent ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚Sum‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ 162898.00‚ ŠƒƒƒƒƒƒƒƒƒƒƒƒŒ
ADDING A STATISTIC
The previous table shows what happens if you don’t tell TABULATE which statistic to use. If the variable in your table is an analysis variable, meaning that it is listed in a VAR statement, then the statistic you will get by default is the sum. Sometimes the sum will be the statistic that you want. Most likely, sum isn’t the statistic that you want.
To specify the statistic for a PROC TABULATE table, you modify the TABLE statement. You list the statistic right after the variable name. To tell TABULATE that the statistic MEAN should be applied to the variable RENT, you use an asterisk to link the variable name to the statis- tic keyword. The asterisk is a TABULATE operator. Just as you use an asterisk as an operator when you want to multiply 2 by 3 (2*3), you use an asterisk when you want to apply a statistic to a variable.
Paper 60-27
Anyone Can Learn PROC TABULATE
Lauren Haworth, Genentech, Inc., South San Francisco, CA
SUGI 27 Beginning Tutorials
PROC TABULATE DATA=TEMP;
TABLE RENT*MEAN;
The output with the new statistic is shown below. Note that the variable name at the top of the column heading has remained unchanged. However, the statistic name that is shown in the second line of the heading now says “Mean.” In addition, the value shown in the table cell has changed from the sum to the mean.
„ƒƒƒƒƒƒƒƒƒƒƒƒ† ‚ Rent ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ Mean ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ 1416.50‚ ŠƒƒƒƒƒƒƒƒƒƒƒƒŒ
ADDING ANOTHER STATISTIC
Each of the tables shown so far was useful, but the power of PROC TABULATE comes from being able to combine several statistics and/or several variables in the same ta- ble. TABULATE does this by letting you specify a series of “tables” within a single large table. We’re going to add a “table” showing the number of observations to our table showing the mean rent.
The first part of our combined table is the code we used before to compute mean rent.
PROC TABULATE DATA=TEMP;
TABLE RENT*MEAN;
Next, we can add similar code to our TABLE statement to get the number of observations. To add this statistic to the first table, all you do is combine the code for the mean (“RENT*MEAN”) with the code you would used to get the number of observations (“RENT*N”). The code for the two “tables” is combined by using a space between the two statements. The space operator tells TABULATE that you want to add another column to your table.
PROC TABULATE DATA=TEMP;
TABLE RENT*N RENT*MEAN;
The resulting table is shown below.
„ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ† ‚ Rent ‚ Rent ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ N ‚ Mean ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ 115.00‚ 1416.50‚ Šƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒŒ
Note that the additional statistic is shown as an additional column in the table. When SAS is creating a one- dimensional table, additional variables, statistics, and categories are always added as new columns.
USING PARENTHESES
While we’re just building a simple table, other tables can get complex in a hurry. To keep your table code easy to read, it’s helpful to simplify it as much as possible. One thing you can do is use parentheses to avoid repeating elements in row or column definitions.
For example, instead of defining the table statement like this:
TABLE RENT*N RENT*MEAN;
It can be defined like this:
TABLE RENT*(N MEAN);
The resulting table is shown below.
„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ† ‚ Rent ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ N ‚ Mean ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ 115.00‚ 1416.50‚ Šƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒŒ
Note that not only is the table definition easier to read, but the table headings have also been simplified. Now the “Rent” label is not repeated over each column, but rather is listed once as an overall heading. Using parentheses will simplify both your table definitions and your output.
ADDING A CLASSIFICATION VARIABLE
After seeing the tables we’ve built so far in this chapter,
you’re probably asking yourself, “Why use PROC TABULATE? Everything I’ve seen so far could be done with a PROC MEANS.”
One answer to this question is classification variables. By specifying a variable to categorize your data, you can produce a concise table that shows values for various subgroups in your data. For example, wouldn’t it be more interesting to look at mean rent if it were broken down by city? 1
To break down rent by city, we will use city as a classifi- cation variable. Just as we used a VAR statement to iden- tify our analysis variable, we use a CLASS statement to identify a classification variable. By putting the variable CITY in a CLASS statement, we are telling TABULATE that the variable will be used to identify categories of the data.
The other thing we have to do to our code is tell TABULATE where to put the classification variable CITY in the table. We do this by again using the asterisk operator. By adding another asterisk to the end of the TABLE statement, and following it with the variable
1 The sample data in this paper is from an informal survey of apartment rents in three cities: San Francisco, the au- thor’s home town; Orlando, since that’s where the paper will be presented; and Seattle, since that’s the site of the next SUGI.
SUGI 27 Beginning Tutorials
name CITY, TABULATE knows that CITY will be used to categorize the mean values of RENT.
PROC TABULATE DATA=TEMP;
CLASS CITY;
TABLE RENT*MEAN*CITY;
The resulting table is shown below. Now the column headings have changed. The variable name Rent and the statistic name Mean are still there, but under the statistic label there are now three columns. Each column is headed by the variable label “City” and the category name Port- land,” “San Francisco,” and “Long Beach.” The values shown in the table cells now represent subgroup means.
„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ† ‚ Rent ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ Mean ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ City ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚San‚ ‚ ‚ Orlando ‚ Francisco ‚ Seattle ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ 837.13‚ 2440.89‚ 1099.55‚ Šƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒŒ
TWO-DIMENSIONAL TABLES
You probably noticed that our example table is not very elegant in appearance. That’s because it only takes advan- tage of one dimension. It has multiple columns, but only one row. It is much more efficient to build tables that have both rows and columns. You can fit more informa- tion on a page, and the table looks better, too.
The easiest way to build a two-dimensional table is to build it one dimension at a time. First, we’ll build the col- umns, and then we’ll add the rows.
For this first table, we’ll keep things simple. This is the table we built in a previous example. It has two columns: one showing the number of observations for RENT and another showing the mean of RENT.
PROC TABULATE DATA=TEMP;
TABLE RENT*(N MEAN);
This table is shown below.
„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ† ‚ Rent ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ N ‚ Mean ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ 115.00‚ 1416.50‚ Šƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒŒ
To turn this table into a two-dimensional table, we will add another variable to the TABLE statement. In this case, we want to add rows that show the N and MEAN of RENT for different sizes of apartments.
To add another dimension to the table, you use a comma as an operator. All you do is put a comma between the row variable(s) and the column variable(s).
If a TABLE statement has no commas, then it is assumed that the variables and statistics are to be created as col- umns. If a TABLE statement has two parts, separated by a comma, then TABULATE builds a two-dimensional table using the first part of the TABLE statement as the rows and the second part of the TABLE statement as the col- umns.
So to get a table with rent as the columns and number of bedrooms as the rows, we just need to add a comma and the variable BEDROOMS. Since we want to add BEDROOMS as a row, we list it before the rest of the TABLE statement. If we wanted to add it as a column, we’d add it to the end of the TABLE statement.
PROC TABULATE DATA=TEMP;
CLASS BEDROOMS;
TABLE BEDROOMS, RENT*N RENT*MEAN;
This table is shown below.
„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ† ‚ ‚ Rent ‚ Rent ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ N ‚ Mean ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚Bedrooms ‚ ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ ‚1 Bedroom ‚ 57.00‚ 1210.82‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚2 Bedrooms ‚ 58.00‚ 1618.64‚ Šƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒŒ
By the way, there is a limitation on which variables you can use in a two-dimensional table. You can’t have a cross-tabulation of two analysis variables. A two- dimensional table must have at least one classification variable (i.e., you must have a CLASS statement). If you think about it, this makes sense. A table of mean rent by mean bedrooms would be meaningless, but a table of mean rent by categories of bedrooms makes perfect sense.
ADDING CLASSIFICATION VARIABLES ON BOTH DIMENSIONS
The previous example showed how to reformat a table from one to two dimensions, but it did not show the true power of two-dimensional tables. With two dimensions, you can classify your statistics by two different variables at the same time.
To do this, you put one classification variable in the row dimension and one classification in the column dimen- sion. The previous example had bedrooms displayed in rows, and rent as the column variable. In this new table, we will add city as an additional column variable. Instead of just displaying the mean rent for each number of bed- rooms, we will display the statistic broken down city.
SUGI 27 Beginning Tutorials
So in the following code, we leave BEDROOMS as the row variable, and we leave RENT in the column dimen- sion. The only change is to add CITY to the column di- mension using the asterisk operator. This tells TABULATE to break down each of the column elements into categories by city.
PROC TABULATE DATA=TEMP;
CLASS BEDROOMS CITY;
TABLE BEDROOMS, RENT*CITY*MEAN;
This table is shown below. Notice how the analysis vari- able RENT remains as the column heading, and MEAN remains as the statistic, but now there are additional col- umn headings to show the three categories of CITY.
„ƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ† ‚‚ Rent ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚‚ City ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ ‚San‚ ‚ ‚ ‚ Orlando ‚ Francisco ‚ Seattle ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ Mean ‚ Mean ‚ Mean ‚ ‡ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚Bedrooms ‚ ‚ ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ ‚ ‚1 Bedroom ‚ 726.85‚ 2143.53‚ 902.00‚ ‡ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚2 Bedrooms‚ 947.40‚ 2721.72‚ 1297.10‚ Šƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒŒ
ADDING ANOTHER CLASSIFICATION VARIABLE
The previous example showed how to add a classification variable to both the rows and columns of a two- dimensional table. But you are not limited to just one classification per dimension. This next example will show how to display additional subgroups of the data.
In this case, we’re going to add availability of high-speed internet access as an additional row classification. The variable is added to the CLASS statement and to the row dimension of the TABLE statement. It is added using a space as the operator, so we will get rows for number of bedrooms followed by rows for internet availability.
PROC TABULATE DATA=TEMP;
CLASS BEDROOMS CITY INTERNET;
TABLE BEDROOMS INTERNET,
RUN; RENT*CITY*MEAN;
In the results shown below, you can see that we now have two two-dimensional “mini-tables” within a single table. First, we have a table of rent by number of bedrooms and city, and then we have a table showing rent by internet availability and city.
„ƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ† ‚‚ Rent ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ City ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ ‚San‚ ‚ ‚ ‚ Orlando ‚ Francisco ‚ Seattle ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ Mean ‚ Mean ‚ Mean ‚ ‡ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚Bedrooms ‚ ‚ ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ ‚ ‚1 Bedroom ‚ 726.85‚ 2143.53‚ 902.00‚ ‡ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚2 Bedrooms‚ 947.40‚ 2721.72‚ 1297.10‚ ‡ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚Internet ‚ ‚ ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ ‚ ‚No ‚ 769.40‚ 2292.89‚ 855.55‚ ‡ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚Yes ‚ 904.85‚ 2616.63‚ 1343.55‚ Šƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒŒ
This ability to stack multiple mini-tables within a single table can be a powerful tool for delivering large quantities of information in a user-friendly format.
NESTING THE CLASSIFICATION VARIABLES
So far, all we have done is added additional “tables” to the bottom of our first table. We used the space operator between each of the row variables to produce stacked tables.
By using a series of row variables, we can explore a vari- ety of relationships between the variables. In previous table, we could see how rent varies by number of bed- rooms and city, and we could see how rent varies by internet availability and city, but we could not see how the number of bedrooms and internet availability inter- acted to affect rent for each city.
The power of TABULATE comes from being able to look at combinations of categories within a single table. In the following example, we will build a table to look at rent by city for combinations of number of bedrooms and internet availability.
This code is the same as we used for the last example. The only change is that in the row definition, the asterisk operator is used to show that we want to nest the two row variables. In other words, we want to see the breakdown of rents by internet availability within each category of number of bedrooms.
PROC TABULATE DATA=TEMP;
CLASS BEDROOMS CITY INTERNET;
TABLE BEDROOMS*INTERNET,
RUN; RENT*CITY*MEAN;
As you can see in the table below, this code produces nested categories within the row headings. The row head- ings are now split into two columns. The first column shows number of bedrooms and the second shows internet availability. It is now easier to interpret the interaction of the two variables.
SUGI 27 Beginning Tutorials
„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ† ‚ ‚ Rent ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚City‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚‚San‚‚ ‚ ‚ Orlando ‚ Francisco ‚ Seattle ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ Mean ‚ Mean ‚ Mean ‚ ‡ƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚Bedrooms ‚Internet ‚ ‚ ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ ‚ ‚1 Bedroom ‚No ‚ 613.80‚ 2012.78‚ 743.30‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚Yes ‚ 839.90‚ 2290.63‚ 1060.70‚ ‡ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚2 Bedrooms‚No ‚ 925.00‚ 2545.00‚ 967.80‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚Yes ‚ 969.80‚ 2942.63‚ 1626.40‚ Šƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒ‹ƒƒƒƒƒƒƒƒƒƒƒƒŒ
You can also reverse the order of the row variables to look at number of bedrooms by internet availability, in- stead of internet availability by number of bedrooms. All you do is move INTERNET so that it comes before BEDROOMS. TABULATE always produces the nested rows in the order the variables are listed on the TABLE statement.
ADDING TOTALS TO THE ROWS AND COLUMNS
As your tables get more complex, you can help make your tables more readable by adding row and column totals. Totals are quite easy to generate in TABULATE because you can use the ALL variable. This is a built in classifica- tion variable supplied by TABULATE that stands for “all observations.” You do not have to list it in the CLASS statement because it is a classification variable by defini- tion.
The following code produces a table similar to the previ- ous example, but with the addition of row totals. The sta- tistic is changed to N so that you can see how the totals work.
PROC TABULATE DATA=TEMP;
CLASS BEDROOMS CITY;
TABLE BEDROOMS, (CITY ALL)*N;
As you can see from the table below, the table now has row totals.
„ƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ† ‚‚ City ‚‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚ ‚ ‚San‚ ‚ ‚ ‚ ‚ Orlando ‚ Francisco ‚ Seattle ‚ All ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰ ‚ ‚N‚N‚N‚N‚ ‡ƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒˆƒƒƒƒƒƒƒƒƒƒƒƒ‰
PROC TABULATE DATA=TEMP;
CLASS BEDROOMS CITY;
TABLE BEDROOMS ALL, CITY*N;
The resulting table is shown below. Now there are overall totals for each city.
„ƒƒƒƒƒƒƒƒƒƒ…ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ† ‚‚ City ‚ ‚ ‡ƒƒƒƒƒƒƒƒƒƒƒƒ…ƒ
程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com