sas - SAS 输入和信息操作顺序
问题描述
我很好奇SAS如何处理informats和informats的输入语句。这些语句的“操作顺序”是什么?我包含了一个来自 SAS EG Import Wizard 生成的程序的示例片段。
免责声明:我很少使用 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 生成的代码,但我很好奇为什么会生成所有这些语句。当我的导入向导状态时,我也不确定为什么 SAS 将: Best32
信息与输入语句一起使用DateTime18.
从历史上看,使用 BASE SAS,我刚刚使用过:
- 带有输入语句的信息
- 一个信息语句,然后是一个随后的输入语句。输入语句将只包含变量名。
#1 的示例:
Data Test;
...infile...;
input @1 TimeStamp DateTime18.;
...format...;
run;
#2 的例子:
Data Test2;
...infile...;
informat TimeStamp DateTime18.;
input TimeStamp;
...format...;
run;
Example #1 只是 Example #2 的简写吗?如果是这样,为什么 EG 会产生额外的步骤?在 EG 生成的代码中 -informat
语句如何不覆盖input
语句信息
解决方案
INFORMAT
andFORMAT
语句不可执行。因此,您可以将它们放置在数据步骤中的任何位置(不包括强制为编译器尚未键入的变量定义类型的副作用)。请注意,这也意味着如果您将多个 FORMAT(信息)分配给同一个变量,则将使用最后一个。
当 INPUT 语句执行您已包含在 INPUT 语句本身中的任何显式信息规范时,将覆盖与该变量关联的任何信息。再次注意,如果编译器尚未键入变量,则 INPUT 语句如何使用该变量将导致为该变量选择类型。
因此,为了获得最可预测的结果,您应该定义变量,而不是让 SAS 根据它们最初出现的方式进行猜测。LENGTH
您可以使用语句或语句来定义它们ATTRIB
。SET
或者通过使用,MERGE
和其他语句拉入现有数据集来定义它们。那么 INPUT、FORMAT 和 INFORMAT 语句的顺序就无关紧要了。
您将不得不询问 SAS 为什么企业指南向导的工作方式如此。我的理解是,对于某些文件(如 Excel 电子表格),它会将数据转换为文本文件并上传它生成的文本文件。所以我假设 EG 将 DATE 和 TIME 值生成为原始天数或秒数,这就是为什么它使用普通数字信息而不是日期或时间信息来读取值的原因。我假设它将 INFORMAT 附加到日期和时间变量,以便数据集定义中的元数据填充与附加格式匹配的内容。
至于他们为什么使用BEST32.
我不知道的信息。SAS 中并没有真正的BEST
信息,所以这实际上只是32.
(或者他们可以使用 F32.
)的别名。信息的“最佳”概念甚至没有任何意义。BEST格式用于确定该特定数字的最佳数字组合,以在有限数量的字符中近似值。要将字符串读入数字 SAS 只需读取数字并将其转换为它们所代表的数字。没有选择任何涉及的“最佳”替代方案。
推荐阅读
- python - 在 Python 中计算两个格式化日期之间的天数会导致“OverflowError: int too big to convert”
- javascript - 点击后清除输入数据
- php - 使用 PHP 和 MySQL 查询多个表
- verilog - 测试台 clk 不前进
- tsql - 如何从累积值创建总计
- firebase - Firestore 安全规则限制字段条目
- html - 视频不会在旧版 Microsoft Edge 中自动播放
- java - 为什么当我键入“sout”时 IntelliJ 不显示“System.out.println()”快捷方式?
- java - 在现有的 java servlet jsp 项目中更新 Gradle
- django - 如何在 Heroku 上设置 Django 翻译