如何克服将日期从excel导入sas 9.4时缺少的值

如何克服将日期从excel导入sas 9.4时缺少的值,sas,Sas,我正在尝试将excel工作表导入sas9.4。有趣的是,我可以毫无问题地导入大部分数据。但是对于日期,有很多随机缺失值(我的excel文件中没有缺失日期)。谁能告诉我如何改进我的代码吗 proc import out= sheet datafile = 'D:\Date.xlsx' dbms = excelcs replace; sheet = "abc" ; SCANTEXT=YES; USEDATE=YES; SCANTIME=NO;

我正在尝试将excel工作表导入sas9.4。有趣的是,我可以毫无问题地导入大部分数据。但是对于日期,有很多随机缺失值(我的excel文件中没有缺失日期)。谁能告诉我如何改进我的代码吗

proc import out= sheet 
    datafile = 'D:\Date.xlsx'
    dbms = excelcs  replace;
    sheet = "abc" ;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=NO;
run;

所有日期看起来都是这样的:2010年6月21日,2010年6月22日。

更有可能的是,您的问题是自动转换考虑的是那些
mm/dd/yyyyy
,但它们实际上是
dd/mm/yyyyy

一种可能的解决方案是使用
SASDATEFMT
选项,记录如下:

这设置了SAS格式,但文档也声称会影响用于转换它的信息

不过,也有可能您的数据实际上是混合字符/数字的(如果它们是手动输入excel的,在excel中输入的是预期的mm/dd/yy,而不是dd/mm/yy)。在这种情况下,最简单的答案是更改注册表,让Microsoft扫描整个列(请参阅),或者简单地将所有值转换为字符(或至少第一对),然后添加一个
mixed=yes行到proc导入语句


(如果您使用的是PC Files Server,则注册表设置可能不起作用,您可能会获得上面的
excelcs
dbms。在这种情况下,请忽略该特定建议。)

将您的dbms更改为XLSX,并将USEDATE更改为No。然后将该字段作为文本字段导入

然后可以使用input()函数创建新的日期变量


不理想,但容易实现

嗨,乔,谢谢你的回答。我认为你是对的。我手工收集了这些数据,excel无法正确识别我的格式。由于某些原因,我无法使用dbms=excel(错误:Connect:Class not registed错误:LIBNAME语句中的错误)。所以我不能使用mixed=yes。请你教我该做什么好吗。由于一些未知的原因,我不能使用dbms xlsx。我将其更改为excelcs,但它仍然会导致许多缺少的值。我用一种非常缓慢和耗时的方法解决了这个问题。我在excel中将
日期
行拆分为日、月和年。然后将它们读入sas并将它们放在一起。请让我知道是否有更好的解决方案。9.4应该允许XLSL。不管怎样,你可以用ExcelCS试试同样的方法。我用ExcelCS试过你的解决方案。导入的数据集缺少很多值。它们是作为文本还是日期导入的?很遗憾,是数字。
proc import file="myfile.xlsx" out=dataset dbms=excel replace;
dbdsopts="sasdatefmt=(varname=DDMMYY10.)";
run;