May I know how can we simplify this step? Multiple IF blocks are confusing and also the retain statement. If we cant simplify this step, can someone explain this code in simple terms? I understand the SAS functions but I'm not getting the whole picture here.
DATA WORK.BASELINE;
SET WORK.BASELINE_;
BASSTRTM2 = INPUT(substr(BSSTRTM,1,2)||':'||substr(BSSTRTM,4,2)||':'||SUBSTR(BSSTRTM,7,2),TIME5.);
BASFINTM2 = INPUT(substr(BASFINTM,1,2)||':'||substr(BASFINTM,4,2)||':'||SUBSTR(BASFINTM,7,2),TIME5.);
BASSTRTDTTM = DHMS(BAS_STRT_DT,0,0,BASSTRTM2);
BASFINDTTM = DHMS(BAS_FINISH_DT,0,0,BASFINTM2);
POSTDTTM = DHMS(POSTNG_DT,0,0,0);
BASEHRS = INTCK('HOURS',BASSTRTDTTM,BASFINDTTM,'continuous');
IF BASEHRS < 1 THEN BASEHRS = 1;
IF BAS_STRT_DT = POSTNG_DT THEN
DO;
IF DAYS_OF_PO = 1 THEN
DO;
INITIALHRS = BASEHRS;
NEWBASEHRS=INITIALHRS;
DAYHRS = INITIALHRS;
END;
ELSE
DO;
INITIALHRS = INTCK('HOURS',BASSTRTDTTM,DHMS(bas_strt_dt,24,0,0),'CONTINUOUS');
DAYHRS = INTCK('HOURS',BASSTRTDTTM,DHMS(bas_strt_dt,24,0,0),'CONTINUOUS');
NEWBASEHRS=BASEHRS-INITIALHRS;
END;
END;
ELSE IF BAS_FINISH_DT = POSTNG_DT THEN
DO;
DAYHRS = NEWBASEHRS;
END;
ELSE
DO;
DAYHRS = 24;
NEWBASEHRS=NEWBASEHRS-DAYHRS;
END;
RETAIN INITIALHRS;
RETAIN NEWBASEHRS;
RUN;
... View more