如何使用数字函数来纠正日期错别字?

时间:2014-07-21 18:41:33

标签: sas

我知道在日期拼写错误上进行手动更正很容易,但我想使用一个或多个SAS函数自动执行此类更正,因为我的数据集很大并且拼写错误频繁。

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

2 个答案:

答案 0 :(得分:0)

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

例如:

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

会将任何'2104'更正为'2014'。这是一个非常简单的修正(也可能造成同样多的伤害,因为'2114'也可能是一个错字),但是沿着这些方向的事情 - 将日期分解成碎片,验证碎片,使用{{1重建}}

答案 1 :(得分:0)

我认为SAS没有任何可以检查数字模式数值的函数。我经常进行数据清理并通过从数字日期变量中创建一个字符变量来解决这个问题,然后使用字符函数和Perl正则表达式来清理字符值,然后将清理后的值存储为数字日期。

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