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