0

我试图找到一种检测日期变量最大值的有效方法。我每天将收到的数据的一个警告是,日期被记录为文本。

我通常会通过以下方式做到这一点:

proc sql noprint ;
 select MAX(MDY(input(SUBSTRN(MyDate, 6, 2),2.), input(SUBSTRN(MyDate, 9, 2),2.), input(SUBSTRN(MyDate, 1, 4),4.))) as max_date FORMAT=date9.
 into :max_date
 from FooData;
quit;

在这种情况下,数据包含超过 1 亿行,并且每天运行此代码似乎很麻烦。谁能想到一个更有效的方法来解决这个问题?

4

2 回答 2

3

YYYYMMDD 的好处在于,当您将其作为字符串进行排序时,它最终也会作为日期进行排序(与例如 MM/DD/YY 不同)。所以只取max().

于 2015-05-18T12:28:45.513 回答
1

您当然可以select通过使用单个信息读取日期而不是 3 个子字符串计算来简化语句。它显然需要为每条记录都这样做,所以它仍然会减慢速度,但希望不会像现在那样慢。

proc sql noprint ;
 select MAX(input(mydate,yymmdd10.)) as max_date FORMAT=date9.
 into :max_date
 from FooData;
quit;
于 2015-05-18T12:03:42.960 回答