【问题标题】:proc import CSV SAS empty values dateproc 导入 CSV SAS 空值日期
【发布时间】:2021-12-31 08:19:58
【问题描述】:

我需要在 SAS 中导入一个 CSV 文件,但它卡在日期格式的空字段上。我的日志显示该字段被正确识别为 DATETIME。和 ANYDTDTM40。就像其他日期时间字段一样。在第一个记录中,该字段为空,然后 LOG 给出一个 NOTE 无效数据。当我在第一行中输入带有空字段的日期时,消息会随之移动。所以它显然与缺失值有关。有人可以帮帮我吗?

【问题讨论】:

  • “导入”是什么意思?你在使用一些提示系统吗?运行 PROC IMPORT?还是您只是编写自己的数据步骤来读取文件,而不是强迫 SAS 猜测如何读取它?请显示您运行的代码和 SAS 日志中的错误消息。
  • 你好汤姆,是的,我的意思是 PROC IMPORT
  • 这是我使用的代码。 (无法共享文件夹和文件名抱歉):PROC IMPORT OUT=WORK.EP008 DATAFILE="Location\file.csv" OUT=work.EP008 DBMS=csv 替换;分隔符=';';猜测行=1500; GETNAMES=是的;运行;
  • 日志注:注:第 2 250-250 行中的 WellLastChangedDate 数据无效。我的 CSV 是;分隔,我拿出了 ALL ;在所有文本中,因此它不会破坏定界。如果我将日期从列 WellLastChangeDate 中的第一个非空字段复制到第 2 行,则错误消息将移至第 3 行等。
  • 文件中第 2 行第 250 列的实际字符是什么?如果只有一个字符并且该字段应该是日期,那么只需按原样使用数据并忽略该消息。您不能将任何单个字符转换为日期时间值,因此将其保留为缺失对我来说似乎很好。

标签: csv sas


【解决方案1】:

以后请确保显示您的实际代码和日志 - 如果它是机密信息,请随时省略日志的数据部分。

PROC IMPORT 是一个猜测程序并猜测类型。对于生产过程,使用 PROC IMPORT 不是一个好主意。

您可以在代码中添加GUESSINGROWS=MAX; 选项,以强制 SAS 在猜测类型之前扫描整个文件。这将增加进程的运行时间,但可能会解决您的问题。此外,请确保您的日期时间字段一致且正确。如果数据确实具有混合日期类型,即 MMDDYY 和 DDMMYY,那么管理起来可能会有些麻烦。或者如果它有 DDMMYY 并且 SAS 猜测 MMDDYY(反之亦然),你会得到一堆错误。在这种情况下,您需要编写自己的数据步骤代码来读取数据。您可以使用日志中的代码作为起点。

【讨论】:

  • 亲爱的 Reeza,我知道.... 我需要讨论包含许可证访问 PCFILES 的必要性,因此我不需要此解决方法。它是唯一的日期时间字段。 Proc 内容显示: WellLastChangedDate Num 8 DATETIME。 ANYDTDTM40。我无法在 Excel 中将其更改为文本格式,因为它会显示日期的编号。
  • Excel 文件而不是 CSV 需要访问 PCFILES,因此它应该与您的问题无关。 CSV 在 Excel 中打开,但是是文本文件,CSV 表示文本文件中的逗号分隔值。我知道这只是一个字段,但您仍然需要修复您的代码。
猜你喜欢
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 2020-06-12
  • 1970-01-01
  • 2017-03-18
  • 2017-08-19
  • 2020-05-09
相关资源
最近更新 更多