This document discusses arithmetic statements that are used for computing data:
In addition, the following statements are discussed which are used to transfer the value of an operand into one or more fields:
Important:
For optimum processing,
                     		  user-defined variables used in
                     		  arithmetic statements should be defined with format P (packed
                     		  numeric).
                  
The following topics are covered:
The COMPUTE statement is used to
                  			 perform arithmetic operations. The following connecting operators are
                  			 available:
               
 ** 
                         |  
                        					 
                        Exponentiation | 
|---|---|
 * 
                         |  
                        					 
                        Multiplication | 
 / 
                         |  
                        					 
                        Division | 
 + 
                         |  
                        					 
                        Addition | 
 - 
                         |  
                        					 
                        Subtraction | 
 ( ) 
                         |  
                        					 
                        Parentheses may be used to indicate logical grouping. | 
COMPUTE LEAVE-DUE = LEAVE-DUE * 1.1
In this example, the value of the field LEAVE-DUE is
                  			 multiplied by 1.1, and the result is placed in the field
                  			 LEAVE-DUE.
               
COMPUTE #A = SQRT (#B)
In this example, the square root of the value of the field
                  			 #B is evaluated, and the result is assigned to the field
                  			 #A.
               
SQRT is a mathematical function supported in the
                  			 following arithmetic statements:
               
For an overview of mathematical functions, see Mathematical Functions below.
COMPUTE #INCOME = BONUS (1,1) + SALARY (1)
In this example, the first bonus of the current year and the current
                  			 salary amount are added and assigned to the field #INCOME.
               
The statements MOVE and
                  			 COMPUTE can be used
                  			 to transfer the value of an operand into one or more fields. The operand may be
                  			 a constant such as a text item or a number, a database field, a user-defined
                  			 variable, a system variable, or, in certain cases, a system function.
               
The difference between the two statements is that in the
                  			 MOVE statement the value to be moved is specified on the left; in
                  			 the COMPUTE statement the value to be assigned is specified on the
                  			 right, as shown in the following examples.
               
MOVE NAME TO #LAST-NAME COMPUTE #LAST-NAME = NAME
The ADD,
                  			 SUBTRACT,
                  			 MULTIPLY and
                  			 DIVIDE statements are
                  			 used to perform arithmetic operations.
               
ADD +5 -2 -1 GIVING #A SUBTRACT 6 FROM 11 GIVING #B MULTIPLY 3 BY 4 GIVING #C DIVIDE 3 INTO #D GIVING #E
All four statements have a
                  			 ROUNDED
                  			 option, which you can use if you wish the result of the operation to be
                  			 rounded.
               
For rules on rounding, see Rules for Arithmetic Assignment.
The Statements documentation provides more detailed information on these statements.
The following program demonstrates the use of user-defined variables in arithmetic statements. It calculates the ages and wages of three employees and outputs these.
** Example 'COMPUX01': COMPUTE ************************************************************************ DEFINE DATA LOCAL 1 MYVIEW VIEW OF EMPLOYEES 2 NAME 2 BIRTH 2 JOB-TITLE 2 SALARY (1:1) 2 BONUS (1:1,1:1) * 1 #DATE (N8) 1 REDEFINE #DATE 2 #YEAR (N4) 2 #MONTH (N2) 2 #DAY (N2) 1 #BIRTH-YEAR (A4) 1 REDEFINE #BIRTH-YEAR 2 #BIRTH-YEAR-N (N4) 1 #AGE (N3) 1 #INCOME (P9) END-DEFINE * MOVE *DATN TO #DATE * READ (3) MYVIEW BY NAME STARTING FROM 'JONES' MOVE EDITED BIRTH (EM=YYYY) TO #BIRTH-YEAR SUBTRACT #BIRTH-YEAR-N FROM #YEAR GIVING #AGE /* COMPUTE #INCOME = BONUS (1:1,1:1) + SALARY (1:1) /* DISPLAY NAME 'POSITION' JOB-TITLE #AGE #INCOME END-READ END
Output of Program COMPUX01:
               
Page      1                                                  14-01-14  14:15:54
 
        NAME                 POSITION          #AGE  #INCOME
-------------------- ------------------------- ---- ----------
JONES                MANAGER                     63      55000
JONES                DIRECTOR                    58      50000
JONES                PROGRAMMER                  48      31000 
               		 
               	 
               	  
               		
               The COMPRESS statement is used to
                  			 transfer (combine) the contents of two or more operands into a single
                  			 alphanumeric field.
               
Leading zeros in a numeric field and trailing blanks in an alphanumeric field are suppressed before the field value is moved to the receiving field.
By default, the transferred values are separated from one another by
                  			 a single blank in the receiving field. For other separating possibilities, see
                  			 the COMPRESS statement option
                  			 LEAVING NO
                        			 SPACE (in the Statements
                  			 documentation).
               
COMPRESS 'NAME:' FIRST-NAME #LAST-NAME INTO #FULLNAME
In this example, a COMPRESS statement is used to
                  			 combine a text constant ('NAME:'), a database field
                  			 (FIRST-NAME) and a user-defined variable (#LAST-NAME)
                  			 into one user-defined variable (#FULLNAME).
               
For further information on the COMPRESS statement,
                  			 please refer to the COMPRESS statement description
                  			 (in the Statements documentation).
               
The following program illustrates the use of the statements
                  			 MOVE and
                  			 COMPRESS.
               
** Example 'COMPRX01': COMPRESS ************************************************************************ DEFINE DATA LOCAL 1 MYVIEW VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 MIDDLE-I * 1 #LAST-NAME (A15) 1 #FULL-NAME (A30) END-DEFINE * READ (3) MYVIEW BY NAME STARTING FROM 'JONES' MOVE NAME TO #LAST-NAME /* COMPRESS 'NAME:' FIRST-NAME MIDDLE-I #LAST-NAME INTO #FULL-NAME /* DISPLAY #FULL-NAME (UC==) FIRST-NAME 'I' MIDDLE-I (AL=1) NAME END-READ END
Output of Program COMPRX01:
               
Notice the output format of the compressed field.
Page      1                                                  14-01-14  14:15:54
 
          #FULL-NAME                FIRST-NAME      I         NAME
============================== -------------------- - --------------------
NAME: VIRGINIA J JONES         VIRGINIA             J JONES
NAME: MARSHA JONES             MARSHA                 JONES
NAME: ROBERT B JONES           ROBERT               B JONES 
               		  In multiple-line displays, it may be useful to combine fields/text
                  			 in a user-defined variable by using
                  			 a COMPRESS
                  			 statement.
               
In the following program, three user-defined variables are used:
                  			 #FULL-SALARY, #FULL-NAME, and
                  			 #FULL-CITY. #FULL-SALARY, for example, contains the
                  			 text 'SALARY:' and the database fields SALARY and
                  			 CURR-CODE. The WRITE statement then references
                  			 only the compressed variables.
               
** Example 'COMPRX02': COMPRESS
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
  2 NAME
  2 FIRST-NAME
  2 SALARY       (1:1)
  2 CURR-CODE    (1:1)
  2 CITY
  2 ADDRESS-LINE (1:1)
  2 ZIP
*
1 #FULL-SALARY   (A25)
1 #FULL-NAME     (A25)
1 #FULL-CITY     (A25)
END-DEFINE
*
READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK'
  COMPRESS 'SALARY:' CURR-CODE(1) SALARY(1) INTO #FULL-SALARY
  COMPRESS FIRST-NAME NAME                  INTO #FULL-NAME
  COMPRESS ZIP CITY                         INTO #FULL-CITY
  /*
  DISPLAY 'NAME AND ADDRESS' NAME (EM=X^X^X^X^X^X^X^X^X^X^X^X)
  WRITE 1/5  #FULL-NAME
        1/37 #FULL-SALARY
        2/5  ADDRESS-LINE (1)
        3/5  #FULL-CITY
  SKIP 1
END-READ
END 
               		  Output of Program COMPRX02:
               
Page      1                                                  14-01-14  14:15:54
 
   NAME AND ADDRESS
-----------------------
 
R U B I N
    SYLVIA RUBIN                    SALARY: USD 17000
    2003 SARAZEN PLACE
    10036 NEW YORK
 
W A L L A C E
    MARY WALLACE                    SALARY: USD 38000
    12248 LAUREL GLADE C
    10036 NEW YORK
 
K E L L O G G
    HENRIETTA KELLOGG               SALARY: USD 52000
    1001 JEFF RYAN DR.
    19711 NEWARK 
               		 
               	 
               	  
               		
               The following Natural mathematical functions are supported in
                  			 arithmetic processing statements (ADD,
                  			 COMPUTE,
                  			 DIVIDE,
                  			 SUBTRACT,
                  			 MULTIPLY).
               
| Mathematical Function | Natural System Function | 
|---|---|
Absolute value of
                           						field.
                         |  
                        					 
                        
                           						ABS(field)
                           						
                         |  
                        				  
                     
Arc tangent of
                           						field.
                         |  
                        					 
                        
                           						ATN(field)
                           						
                         |  
                        				  
                     
Cosine of
                           						field.
                         |  
                        					 
                        
                           						COS(field)
                           						
                         |  
                        				  
                     
Exponential of
                           						field.
                         |  
                        					 
                        
                           						EXP(field)
                           						
                         |  
                        				  
                     
Fractional part of
                           						field.
                         |  
                        					 
                        
                           						FRAC(field)
                           						
                         |  
                        				  
                     
Integer part of
                           						field.
                         |  
                        					 
                        
                           						INT(field)
                           						
                         |  
                        				  
                     
Natural logarithm of
                           						field.
                         |  
                        					 
                        
                           						LOG(field)
                           						
                         |  
                        				  
                     
Sign of
                           						field.
                         |  
                        					 
                        
                           						SGN(field)
                           						
                         |  
                        				  
                     
Sine of
                           						field.
                         |  
                        					 
                        
                           						SIN(field)
                           						
                         |  
                        				  
                     
Square root of
                           						field.
                         |  
                        					 
                        
                           						SQRT(field)
                           						
                         |  
                        				  
                     
Tangent of
                           						field.
                         |  
                        					 
                        
                           						TAN(field)
                           						
                         |  
                        				  
                     
Numeric value of an alphanumeric
                           						field.
                         |  
                        					 
                        
                           						VAL(field)
                           						
                         |  
                        				  
                     
See also the System Functions documentation for a detailed explanation of each mathematical function.
See the following example programs: