变量的长度定义了值存储到磁盘时占用的空间量。 注意:在运行 DATA 步期间,所有数字都是双精度的,长度小于 8 的截断只发生在输出媒体期间。
信息是与长度不同的概念。Informat 定义了如何将传入的值表示形式解释为存储为 SAS 数值。传入的值表示将是必须处理的文本;无论是读取文件的 INPUT 语句、处理输入值的 VIEWTABLE 字段编辑、EG 网格单元格编辑等...
格式同样是一个独立的概念,它定义了 SAS 如何为输出呈现数值;无论是 PUT 语句、VIEWTABLE 行渲染、PROC 输出中的放置、EG 网格单元等...
解释
既然这已经不碍事了,当在 INPUT 语句中明确说明时,该信息将得到尊重:
data _null_;
attrib number length=6 informat=5.;
input number 5.;
put 'NOTE: ' number=;
datalines;
987654321
run;
===== LOG =====
NOTE: number=98765
而且,正如您所质疑的那样,未应用与信息相关的变量,未说明明确的数字信息
data _null_;
attrib number length=6 informat=5.;
input number;
put 'NOTE: ' number=;
datalines;
987654321
run;
===== LOG =====
NOTE: number=987654321
所以第一个是指定格式的 LIST 输入,第二个是简单的LIST 输入(因为没有指定格式)。
简单的列表输入将接受一些荒谬的大数据,结果值虽然不是尾端精确,但将处于正确的指数水平。
data _null_;
attrib number length=6 informat=5.;
input number;
put 'NOTE: ' number= ;
datalines;
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
run;
===== LOG =====
NOTE: number=1.2345679E89
INPUT Statement, List的文档是怎么说的?在没有指明的情况下使用声明的变量当然没有任何意义
简单列表输入
简单的列表输入对 INPUT 语句可以读取的数据类型有几个限制:
• 默认情况下,必须至少用一个空格分隔输入值。在 INFILE 语句中使用 DLM= 或 DLMSTR= 选项或 DSD 选项来指定除空白之外的分隔符。
• 用句点表示每个缺失值,而不是空格或两个相邻的分隔符。
• 字符输入值不能超过 8 个字节,除非在前面的 LENGTH、ATTRIB 或 INFORMAT 语句中为变量指定了更长的长度。
• 字符值不能包含嵌入的空格,除非您更改分隔符。
• 数据必须采用标准数字或字符格式。(脚注 1)
脚注 1:有关标准和非标准数据值的信息,请参见 SAS 语言参考:概念。(我的大声笑)
“SAS 变量属性”状态的概念
信息
指 SAS 在读取数据值时使用的指令。如果未指定信息,则默认信息是数字变量的 wd和 $w。对于字符变量。您可以将 SAS 信息分配给 INFORMAT 或 ATTRIB 语句中的变量。您可以使用 FORMAT 过程为变量创建自己的信息。
(我的大胆)
显然没有明确的默认值,例如 32. 或 best32。因为超过 32 位的值将被正确输入。
那么文档是否解释了一些事情?是的,嗯,有点。有什么收获:
- 在简单列表输入期间继承其信息的数值变量的人类直觉与实际实现的行为不一致。
- 现有 SAS 代码的构造数量意味着实现这种直觉的改变是极不可能的
- 简单的陈述可能涉及大量的概念和广泛的文档
- 可能的变化是文档将被更新以更明确地说明简单列表输入警告