Sas 如何使用数字函数纠正日期输入错误?

Sas 如何使用数字函数纠正日期输入错误?,sas,Sas,我知道手动更正日期键入很容易,但我想使用一个或多个SAS函数自动更正日期键入,因为我的数据集很大且键入频繁 例如,似乎创建我正在清理的数据集的人经常将某人出生日期的年份转换为数字(例如,“2102”而不是“2012”,“2110”而不是“2010”等)。我知道一些字符串函数,如INDEX(),可以查找某些字符值或字符串,然后允许在相同位置替换所述字符(即,将“ABCD”替换为“ABBB”,而不管字符串在值中的位置如何)。同样的过程可以用数字(特别是日期)值复制吗?我能想到的唯一简洁的建议是使用m

我知道手动更正日期键入很容易,但我想使用一个或多个SAS函数自动更正日期键入,因为我的数据集很大且键入频繁


例如,似乎创建我正在清理的数据集的人经常将某人出生日期的年份转换为数字(例如,“2102”而不是“2012”,“2110”而不是“2010”等)。我知道一些字符串函数,如INDEX(),可以查找某些字符值或字符串,然后允许在相同位置替换所述字符(即,将“ABCD”替换为“ABBB”,而不管字符串在值中的位置如何)。同样的过程可以用数字(特别是日期)值复制吗?

我能想到的唯一简洁的建议是使用
mdy
(假设这是日期,而不是日期时间变量)

例如:

data want;
 set have;
 if year(datevar) > 2100 then
   datevar = mdy(month(datevar),day(datevar),year(datevar)-90);
run;

将任何“2104”改为“2014”。这是一个非常简单的更正(可能弊多利少,因为“2114”也是一个可能的打字错误),但按照这些思路,将日期分成几部分,验证这些部分,使用
mdy
重建。我认为SAS没有任何功能可以检查数字模式的数值。我经常清理数据并解决这个问题,方法是从数字日期变量中生成一个字符变量,然后使用字符函数和Perl正则表达式清理字符值,然后将清理后的值存储为数字日期


对于特定的日期值,您可以尝试使用SAS日期函数(例如DAY()、MONTH()、YEAR()、MDY()等)提取部分日期值,对其进行错误检查,然后将它们全部重新组合成日期值。这可能是一个很好的快速解决方案,如果你希望有一个有限的打字错误集,你大概知道他们是什么。要进行更彻底的错误检查,将数值转换为字符并使用char或regex函数将为您提供更多选项。

请提供您正在处理的SAS数据和到目前为止的代码的最小工作示例?