SAS输入和信息操作顺序

时间:2019-02-22 19:02:10

标签: sas enterprise-guide

我很好奇SAS如何处理信息和带有信息的输入语句。这些语句的“操作顺序”是什么?我提供了SAS EG导入向导生成的程序中的示例片段。

免责声明:我很少使用EG Import Wizard,但是我的雇主要求我们尽可能使用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,但是我很好奇为什么生成所有这些语句。我也不确定为什么导入向导指出: Best32

时,SAS在输入语句中使用DateTime18.信息

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

  1. 使用输入语句进行信息
  2. 一个informat语句,然后是后面的输入语句。输入 语句将只包含变量名。

第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生成的代码中-informat语句如何不覆盖input语句的信息

1 个答案:

答案 0 :(得分:2)

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

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

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

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

关于他们为何使用BEST32.信息的原因,我不知道。 SAS中实际上没有BEST信息,因此实际上只是32.的别名(或者他们本可以使用F32.)。信息的“最佳”概念甚至根本没有意义。 BEST 格式用于为该特定数字找出要生成的最佳数字组合,以近似表示有限数量的字符中的值。 SAS将字符串读取为数字时,只需读取数字并将其转换为它们代表的数字即可。没有任何涉及的“最佳”选择。