I'm used the below code to find only the year of birth from age using cobol but couldn't able to convert the year into numeric variable. My code is
IDENTIFICATION DIVISION.
PROGRAM-ID. AGECONV.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CURR-YEAR PIC X(4) VALUES SPACES.
01 YEAR-OF-BIRTH X(4).
PROCEDURE DIVISION
MOVE FUNCTION CURRENT-DATE TO CURR-YEAR.
DISPLAY CURR-YEAR
SUBTRACT CURR-YEAR BY 22
GIVING YEAR-OF-BIRTH.
DISPLAY YEAR-OF-BIRTH.
I got the error that curr-year is not numeric.
For SUBTRACT
the sending field, CURR-YEAR
, needs to be numeric. It was defined as alphanumeric. This means that CURR-YEAR
needs to be PIC 9(4)
. The same is true of YEAR-OF-BIRTH
which was missing the PIC
.
FUNCTION CURRENT-DATE
is an alphanumeric sending field. This rules for MOVE
do not allow it to be moved directly to a numeric field. The reference modifier, (1:4)
, was added to allow the move.
The format of the SUBTRACT
statement was incorrect and has been changed.
Revised code:
IDENTIFICATION DIVISION.
PROGRAM-ID. AGECONV.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CURR-YEAR PIC 9(4) VALUE ZERO.
01 YEAR-OF-BIRTH PIC 9(4).
PROCEDURE DIVISION.
MOVE FUNCTION CURRENT-DATE (1:4) TO CURR-YEAR.
DISPLAY CURR-YEAR
SUBTRACT 22 FROM CURR-YEAR
GIVING YEAR-OF-BIRTH.
DISPLAY YEAR-OF-BIRTH.
Output:
2020
1998