0

一般问题,我有代码来比较日期并且它工作正常,但是,有些列有问号而不是日期。当我的代码通过列运行时,问号不应该影响决策,对吗?如果这是一个不正确的决定,有没有办法用我的数据集中所有列中的缺失值替换?

Data new1;
set new;
format first date MMDDYY10. Last date MMDDYY10.    
first = min(input(serve_date, MMDDYY10.), input(rev_start, MMDDYY10.);
last = max(input(serve_date, MMDDYY10.), input(rev_start, MMDDYY10.);
drop date;
run;
4

1 回答 1

1

如果日期字段(字符)有“?” 在其中,那么当 INPUT 命中它时,您将自动获得一个缺失值(以及日志中的一条消息)。

Data new1;
set new;
format first MMDDYY10. Last MMDDYY10.;
first = min(input(serve_date, ??MMDDYY10.), input(rev_start, ??MMDDYY10.);
last = max(input(serve_date, ??MMDDYY10.), input(rev_start, ??MMDDYY10.);
run;

这 ??告诉它忽略错误的转换。但是,您还有另一个问题:丢失的内容怎么办?

如果您希望 ONE missing 自动使第一个或最后一个丢失,您需要执行以下操作(取决于具体细节):

Data new1;
set new;
format first MMDDYY10. Last MMDDYY10.;
if (rev_start ne "?" and serve_date ne "?") then do;
  first = min(input(serve_date, ??MMDDYY10.), input(rev_start, ??MMDDYY10.);
  last = max(input(serve_date, ??MMDDYY10.), input(rev_start, ??MMDDYY10.);
end;
run;

如果一个缺失是可以的,那么你需要考虑第一个/最后一个应该是缺失的,哪个应该是有效值 - 并以这种方式设置。

于 2013-09-05T20:09:37.183 回答