检测SAS中最大变量值的最快方法是什么
What is the quickest way to detect the maximum variable value in SAS
我正在尝试找到一种检测日期变量最大值的有效方法。我每天都会收到的数据的一个警告是日期以文本形式记录。
我通常会按以下方式进行:
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;
在这种情况下,数据包含超过 100m 行并且 运行 每天这段代码看起来很麻烦。谁能想出更有效的方法来解决这个问题?
您当然可以简化 select
语句,方法是使用单个信息来读取日期,而不是 3 个子字符串计算。它显然需要为每条记录执行此操作,因此它仍然会减慢速度,但希望不会像现在那么慢。
proc sql noprint ;
select MAX(input(mydate,yymmdd10.)) as max_date FORMAT=date9.
into :max_date
from FooData;
quit;
YYYYMMDD 的好处在于,当您将它作为字符串排序时,它最终也会作为日期排序(与 MM/DD/YY 不同)。所以只需要 max()
.
我正在尝试找到一种检测日期变量最大值的有效方法。我每天都会收到的数据的一个警告是日期以文本形式记录。
我通常会按以下方式进行:
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;
在这种情况下,数据包含超过 100m 行并且 运行 每天这段代码看起来很麻烦。谁能想出更有效的方法来解决这个问题?
您当然可以简化 select
语句,方法是使用单个信息来读取日期,而不是 3 个子字符串计算。它显然需要为每条记录执行此操作,因此它仍然会减慢速度,但希望不会像现在那么慢。
proc sql noprint ;
select MAX(input(mydate,yymmdd10.)) as max_date FORMAT=date9.
into :max_date
from FooData;
quit;
YYYYMMDD 的好处在于,当您将它作为字符串排序时,它最终也会作为日期排序(与 MM/DD/YY 不同)。所以只需要 max()
.