【问题标题】:SAS Input and Informat Order of OperationsSAS 输入和信息操作顺序
【发布时间】:2019-02-22 19:02:10
【问题描述】:

我很好奇 SAS 如何处理信息以及带有信息的输入语句。这些语句的“操作顺序”是什么?我包含了一个来自 SAS EG Import Wizard 生成的程序的示例 sn-p。

免责声明:我很少使用 EG 导入向导,但我的雇主要求我们尽可能使用 EG,即创建新程序,所以我很好奇这个功能是如何工作的。

数据:
TimeStamp 01/01/2019 12:00:00 AM

EG 生成代码示例:

data Input;
length TimeStamp 4;
format TimeStamp mmddyy10.;
informat TimeStamp mmddyy10.;
...some infile statement...
input TimeStamp : Best32;
TimeStamp = DatePart(TimeStamp);
run;

上面的例子是EG生成的代码,但我很好奇为什么会生成所有这些语句。当我的导入向导状态为DateTime18. 时,我也不确定 SAS 为何在输入语句中使用: Best32 信息

从历史上看,使用 BASE SAS,我刚刚使用过:

  1. 使用输入语句提供信息
  2. 一个信息语句,然后是一个随后的输入语句。输入 语句将只包含变量名。

#1 示例:

Data Test;
...infile...;
input @1 TimeStamp DateTime18.;
...format...;
run;

#2 示例:

Data Test2;
...infile...;
informat TimeStamp DateTime18.;
input TimeStamp;
...format...;
run;

示例 #1 只是示例 #2 的简写吗?如果是这样,为什么 EG 会产生额外的步骤?在 EG Generated Code - informat 语句如何不覆盖 input 语句信息

【问题讨论】:

  • 我认为如果您在communities.sas.com 提出问题,您可能更有机会获得答案,因为在 SAS 工作的技术人员经常为该论坛做出贡献。
  • 您是否在问为什么企业指南向导会这样做?还是只是为了理解它生成的示例代码?
  • 您能否再次检查您的示例 EG 生成代码是否真的是 EG 生成的?它有效吗?特别是,您为 TimeStamp 获得了什么价值?我看不出它怎么能做正确的事。
  • @Tom 澄清一下。从技术上讲,我在问这两个问题 - 它为什么会这样做,因为我不确定我是否理解 EG 这样做的原因。
  • @Quentin 是的,我确定,我复制/粘贴并更改了 var 名称,但保持语句的顺序相同。

标签: sas enterprise-guide


【解决方案1】:

INFORMATFORMAT 语句不可执行。因此,您可以将它们放在数据步骤中的任何位置(不包括强制为编译器尚未键入的变量定义类型的副作用)。请注意,这也意味着如果您将多个 FORMAT(信息)分配给同一个变量,则将使用最后一个。

当 INPUT 语句执行您包含在 INPUT 语句本身中的任何显式信息规范时,将覆盖与变量关联的任何信息。再次注意,如果编译器尚未键入变量,则 INPUT 语句如何使用该变量将导致为该变量选择类型。

因此,为了获得最可预测的结果,您应该定义变量,而不是让 SAS 根据它们最初出现的方式进行猜测。您可以使用LENGTH 语句或ATTRIB 语句来定义它们。或者通过使用SETMERGE 和其他语句拉入现有数据集来定义它们。那么 INPUT、FORMAT 和 INFORMAT 语句的顺序就无关紧要了。

您必须询问 SAS 为何 Enterprise Guide 向导的工作方式如此。我的理解是,对于某些文件(如 Excel 电子表格),它会将数据转换为文本文件并上传它生成的文本文件。所以我假设 EG 将 DATE 和 TIME 值生成为原始天数或秒数,这就是为什么它使用普通数字信息而不是日期或时间信息来读取值的原因。我假设它将 INFORMAT 附加到日期和时间变量,以便数据集定义中的元数据填充与附加格式匹配的内容。

至于他们为什么使用BEST32. 信息我不知道。 SAS 中并没有真正的BEST 信息,所以这实际上只是32. 的别名(或者他们可以使用F32.)。信息的“最佳”概念甚至没有任何意义。最佳 格式 用于确定该特定数字的最佳数字组合,以在有限数量的字符中近似值。要将字符串读入数字 SAS 只需读取数字并将其转换为它们所代表的数字。不涉及任何“最佳”替代方案。

【讨论】:

  • “informat 和 format 语句不可执行”是什么意思?
  • 可执行语句是在数据步骤的正常迭代发生时执行的东西。就像一个赋值语句。您可以通过IF 或其他条件逻辑控制它是否执行。诸如 DROP、KEEP、LABEL、RETAIN 等声明性语句仅由编译器用于定义您要执行的数据步骤。
猜你喜欢
  • 1970-01-01
  • 2016-01-13
  • 2017-12-05
  • 1970-01-01
  • 2015-11-29
  • 2022-12-11
  • 2015-03-13
  • 2011-04-27
  • 1970-01-01
相关资源
最近更新 更多