【问题标题】:SAS why invalid data lengthSAS为什么数据长度无效
【发布时间】:2014-04-05 21:53:56
【问题描述】:
data temp;
 length a 1 b 3 x;
 infile '';
 input a b x;
run;

答案是“未创建数据集 TEMP,因为变量 A 的长度无效”。 为什么在这个小程序中无效?

【问题讨论】:

  • 你还有一个问题,x 在长度语句中,但实际上并没有在那里定义。

标签: sas variable-length


【解决方案1】:

这是无效的,因为 SAS 不允许您创建长度小于 3 或大于 8 的数值变量。

【讨论】:

    【解决方案2】:

    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 不能存储。

    您可以阅读this article,了解有关 Windows 中 SAS 数值精度的更多详细信息。

    数字长度可以是 3 到 8。SAS 使用几乎所有的前两个字节来存储符号和指数(第一位是符号,接下来的 11 位是指数),所以 2 字节数字将只有 5 位精度。虽然有些语言有这么小的类型,但 SAS 选择不这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      相关资源
      最近更新 更多