 Previous Page

 |

 Next Page

FORMAT Procedure
 Syntax

 Overview

 Concepts

 Using

 Results

 Examples

Example 6: Creating a Format from a Data
Set
PROC FORMAT statement option: : CNTLIN=
Features:
Input control data set

Data set: WORK.POINTS, created from data lines in the sample code.

Details

This example shows how to create a format from a SAS data set.
Tasks include the following:

 creating a format from an input control data set

 creating an input control data set from an existing SAS data set

Program
data scale;
input begin $ 1-2 end $ 5-8 amount $ 10-12;
datalines;
0 3 0%
4 6 3%
7 8 6%
9 10 8%
11 16 10%
;
data ctrl;
length label $ 11;
set scale(rename=(begin=start amount=label)) end=last;
retain fmtname 'PercentageFormat' type 'n';
output;
if last then do;
hlo='O';
label='***ERROR***';
output;
end;
run;
proc print data=ctrl noobs;
title 'The CTRL Data Set';
run;

Program Description
Create a temporary data set named scale. The first two variables in the data lines, called BEGIN
and END, will be used to specify a range in the format. The third variable in the data lines, called
AMOUNT, contains a percentage that will be used as the formatted value in the format. Note that
all three variables are character variables as required for PROC FORMAT input control data sets.
data scale;
input begin $ 1-2 end $ 5-8 amount $ 10-12;
datalines;
0 3 0%
4 6 3%
7 8 6%
9 10 8%
11 16 10%
;
Create the input control data set CTRL and set the length of the LABEL variable. The LENGTH
statement ensures that the LABEL variable is long enough to accommodate the label
***ERROR***.
data ctrl;
length label $ 11;
Rename variables and create an end-of-file flag. The data set CTRL is derived from
WORK.SCALE. RENAME= renames BEGIN and AMOUNT as START and LABEL,
respectively. The END= option creates the variable LAST, whose value is set to 1 when the last
observation is processed.
set scale(rename=(begin=start amount=label)) end=last;
Create the variables FMTNAME and TYPE with fixed values. The RETAIN statement is more
efficient than an assignment statement in this case. RETAIN retains the value of FMTNAME and
TYPE in the program data vector and eliminates the need for the value to be written on every
iteration of the DATA step. FMTNAME specifies the name PercentageFormat, which is the
format that the input control data set creates. The TYPE variable specifies that the input control
data set will create a numeric format.
retain fmtname 'PercentageFormat' type 'n';
Write the observation to the output data set.
output;
Create an “other” category. Because the only valid values for this application are 0–16, any other
value (such as missing) should be indicated as an error to the user. The IF statement executes
only after the DATA step has processed the last observation from the input data set. When IF
executes, HLO receives a value of O to indicate that the range is OTHER, and LABEL receives a
value of ***ERROR***. The OUTPUT statement writes these values as the last observation in
the data set. HLO has missing values for all other observations.
if last then do;
hlo='O';
label='***ERROR***';
output;
end;
run;
Print the control data set, CTRL. The NOOBS option suppresses the printing of observation
numbers.
proc print data=ctrl noobs;
Specify the title.
title 'The CTRL Data Set';
run;

Output
The CTRL Data Set

Store the created format in the catalog WORK.FORMATS and specify the source for the format.
The CNTLIN= option specifies that the data set CTRL is the source for the format PTSFRMT.
proc format library=work cntlin=ctrl;
run;
Create the numeric informat Evaluation. The INVALUE statement converts the specified values.
The letters O (Outstanding), S (Superior), E (Excellent), C (Commendable), and N (None)
correspond to the numbers 4, 3, 2, 1, and 0, respectively.
proc format library=library;
invalue evaluation 'O'=4
'S'=3
'E'=2
'C'=1
'N'=0;
run;
Create the WORK.POINTS data set. The instream data, which immediately follows the
DATALINES statement, contains a unique identification number (EmployeeId) and bonus
evaluations for each employee for each quarter of the year (Q1–Q4). Some of the bonus
evaluation values that are listed in the data lines are numbers; others are character values. Where
character values are listed in the data lines, the Evaluation. informat converts the value O to 4,
the value S to 3, and so on. The raw data values 0 through 4 are read as themselves because they
are not referenced in the definition of the informat. Converting the letter values to numbers
makes it possible to calculate the total number of bonus points for each employee for the year.
TotalPoints is the total number of bonus points. The addition operator is used instead of the SUM
function so that any missing value will result in a missing value for TotalPoints.
data points;
input EmployeeId $ (Q1-Q4) (evaluation.,+1);
TotalPoints=q1+q2+q3+q4;
datalines;
2355 S O O S
5889 2 . 2 2
3878 C E E E
4409 0 1 1 1
3985 3 3 3 2
0740 S E E S
2398 E E C
5162 C C C E
4421 3 2 2 2
7385 C C C N
;
Generate a report for WORK.POINTS and associate the PTSFRMT. format with the TotalPoints
variable. The DEFINE statement performs the association. The column that contains the
formatted values of TotalPoints is using the alias Pctage. Using an alias enables you to print a
variable twice, once with a format and once with the default format. For more information about
the REPORT procedure, see REPORT Procedure.
proc report data=work.points nowd headskip split='#';
column employeeid totalpoints totalpoints=Pctage;
define employeeid / right;
define totalpoints / 'Total#Points' right;
define pctage / format=PercentageFormat12. 'Percentage' left;
title 'The Percentage of Salary for Calculating Bonus';
run;

Output
The Percentage of Salary for Calculating Bonus
 Previous Page

 |

 Next Page

 |

 Top of Page