data temp;
length a 1 b 3 x;
infile '';
input a b x;
run;
答案说“由于变量A的长度无效,因此未创建数据集TEMP”。 为什么它在这个小程序中无效?
答案 0 :(得分:4)
它无效,因为SAS不允许您创建长度小于3或大于8的数字变量。
答案 1 :(得分:2)
Length
与显示宽度无关(仅由format
控制);它是用于保存变量的存储。在字符变量中,它可以以这种方式使用,因为字符每个占用1个字节,因此$7
长度直接等同于$7.
格式。如果要限制屏幕上数字的表示方式,请使用format
语句来控制该数字(format a 1.;
)。如果您想告诉SAS要输入一个数字的字符数,请使用informat
(informat a 1.;
)。
但是,对于数字变量,关系不一样。大多数数字是8个字节,它将数字的二进制表示存储为双精度浮点数。因此,格式为1.
的数字通常仍会占用这8个字节,就像格式为16.3
的数字一样。
现在,如果您愿意,可以稍微限制长度,但需要考虑一些因素。如果限制数字变量的长度,则可能会失去一些精度。在1.
格式编号中,赔率不是问题;您可以精确地以三字节数字(3位精度)存储最多8192(整数),因此一位数是安全的。
一般情况下,除非处理存储成本非常高的大量数据,否则操作数字长度会更安全,因为您可能会遇到计算精度问题(例如,除法很可能会导致问题) 。限制不是整数大小,而是精度;例如,虽然8192是3字节数中可存储的最大整数,但8191.5不能存储在3字节中。事实上,9/8是,但11/8不能精确存储 - 最小值为8.192,小数点后3位数,因此8.125可存储但8.375不存储。
有关Windows中SAS数字精度的更多详细信息,请阅读this article。
数字长度可以是3到8.SAS使用几乎所有前两个字节来存储符号和指数(第一个位是符号,下一个11位是指数),所以2字节数字会只有5位精度。虽然有些语言的类型很小,但SAS选择不这样做。