Focal Point
[SOLVED] DATEDIF Difficulties?

This topic can be found at:
https://forums.informationbuilders.com/eve/forums/a/tpc/f/1381057331/m/7727001096

May 07, 2018, 03:53 PM
Max Nevill
[SOLVED] DATEDIF Difficulties?
I have an A6 field called "TERM" in the form YYYYMM i.e. 200601. I have a second YYMD field called "DATE".

DATEDIF accepts arguments like DATEDIF(DATE, 'Sep 1 2006, 'D')

Using this logic, I thought I'd calculate age by making the following defines:

TEMP_MONTH/A6=IF SUBSTR(6, TERM, 5, 6, 2, 'A2') LE '01' THEN 'Jan 1 ' ELSE
IF SUBSTR(6, TERM, 5, 6, 2, 'A2') LE '05' THEN 'May 1 ' ELSE 'Sep 1 ';

TEMP_YEAR/A4=SUBSTR(6, TERM, 1, 4, 4, 'A4');

AGE/D12.2=DATEDIF( DATE, TEMP_MONTH | TEMP_YEAR , 'D' ) / 365.25;

This spits out the error:

0 ERROR AT OR NEAR LINE 8 IN PROCEDURE TEST_TRN58FOCEXEC *
(FOC36355) INVALID TYPE OF ARGUMENT #2 FOR USER FUNCTION DATEDIF
(FOC101) ERROR IN DEFINE IN MASTER FILE: APPLICATIONS/APP_APPLICATIONS_REGS_PRE


What am I doing wrong? Any help would be awesome, thanks.

This message has been edited. Last edited by: FP Mod Chuck,


WebFocus 8.104
Windows 7 Entreprise, SP1
May 07, 2018, 05:03 PM
Waz
Because your DATE field is format YYMD, I would suggest converting your TERM field to a smart date, YYMD, then just subtract one from the other.

TABLE FILE CAR
PRINT
COMPUTE TERM/A6 = '200601' ;
COMPUTE DATE/YYMD = &YYMD ;
COMPUTE TERMDATE/YYMD =  DATECVT(TERM,'A6YYM','YYM');
COMPUTE AGE/D12.2 = (DATE - TERMDATE) / 365.25 ;
BY COUNTRY NOPRINT



Waz...

Prod:WebFOCUS 7.6.10/8.1.04Upgrade:WebFOCUS 8.2.07OS:LinuxOutputs:HTML, PDF, Excel, PPT
In Focus since 1984
Pity the lost knowledge of an old programmer!

May 08, 2018, 12:50 PM
Max Nevill
Waz the migrator accepts those but the problem is that the math is screwed up.

BIRTHDATE = 1976/08/29

TERM = 201709
TERM_DATE = DATECVT(TERM,'A6YYM','YYM') = 2017/09
AGE = DATEDIF( TERM_DATE, BIRTH_DATE , 'D' ) / 365.25 = 71.82

Using AGE =DATEDIF( TERM_DATE, BIRTH_DATE , 'M' ) / 12 = 71.75

One would think I'd get 43 plus a bit.


WebFocus 8.104
Windows 7 Entreprise, SP1
May 08, 2018, 05:01 PM
Waz
With this I get 41.01, which seems correct

TABLE FILE CAR
PRINT
COMPUTE TERM/A6 = '201709' ;
COMPUTE DATE/YYMD = '1976/08/29' ;
COMPUTE TERMDATE/YYMD =  DATECVT(TERM,'A6YYM','YYM');
COMPUTE AGE/D12.2 = (TERMDATE - DATE) / 365.25 ;
BY COUNTRY NOPRINT
END



Waz...

Prod:WebFOCUS 7.6.10/8.1.04Upgrade:WebFOCUS 8.2.07OS:LinuxOutputs:HTML, PDF, Excel, PPT
In Focus since 1984
Pity the lost knowledge of an old programmer!

May 08, 2018, 06:37 PM
Max Nevill
Waz, hmm. I looked further and in the migrator had my TERM_DATE field formatted as YYM instead of YYMD.

Works fine now.


WebFocus 8.104
Windows 7 Entreprise, SP1
May 08, 2018, 06:53 PM
Waz
Good One


Waz...

Prod:WebFOCUS 7.6.10/8.1.04Upgrade:WebFOCUS 8.2.07OS:LinuxOutputs:HTML, PDF, Excel, PPT
In Focus since 1984
Pity the lost knowledge of an old programmer!