Initially, I tried to run the code below, where edate and ddate were originally non-negative integers (0, 1, 2, ...). However, when edate or ddate were originally 0, the new rewritten edate or ddate became 14736, instead of the correct 14737 from day0 = mdy(05, 07, 00). It was fine when edate or ddate were positive integers. data csp.task3; set csp.task2; day0 = mdy(05, 07, 00); edate = edate + day0; ddate = ddate0 + day0; run; Then, I tried to create placeholder variables to see if the problem can be avoided. data csp.task3;
set csp.task2;
day0 = mdy(05, 07, 00);
edate0 = edate + day0;
ddate0 = ddate + day0;
edate = edate0;
ddate = ddate0;
format edate ddate day0 date9.;
run; And I also tried this: data csp.task3;
set csp.task2;
day0 = mdy(05, 07, 00);
edate0 = intnx('day', day0, edate);
ddate0 = intnx('day', day0, ddate);
edate = edate0;
ddate = ddate0;
format edate ddate day0 date9.;
run; Well, the problem persists in an even more bizarre way: edate ddate edate0 ddate0 1 14736 14736 14737 14737 2 14736 14738 14737 14738 I simply assigned edate0 to edate and ddate0 to ddate, and still managed to get the wrong values. I did some experiments with simple numeric values and couldn't reproduce the same error. Maybe it has to do with the special date class and some memory address problem?
... View more