SAS为什么数据长度无效

SAS为什么数据长度无效,sas,variable-length,Sas,Variable Length,答案是“没有创建数据集TEMP,因为变量A的长度无效”。 为什么在这个小程序中它是无效的?它是无效的,因为SAS不允许您创建长度小于3或大于8的数值变量。它是无效的,因为SAS不允许您创建长度小于3或大于8的数值变量。数值变量的长度与显示宽度(仅由格式控制);它是用来保存变量的存储器。在字符变量中,它可以这样使用,因为每个字符占用1个字节,所以$7长度直接等于$7.格式。如果要限制数字在屏幕上的表示方式,请使用format语句来控制(format a 1.)。如果要告诉SAS一个数字要输入多少个

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

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

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

数值变量的
长度
与显示宽度(仅由
格式
控制);它是用来保存变量的存储器。在字符变量中,它可以这样使用,因为每个字符占用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选择不这样做。

数值变量的长度与显示宽度无关(仅由
格式
控制);它是用来保存变量的存储器。在字符变量中,它可以这样使用,因为每个字符占用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选择不这样做。

您还有一个问题,即
x
在length语句中,但实际上没有定义。您还有一个问题,即
x
在length语句中,但实际上没有定义。
data temp;
 length a 1 b 3 x;
 infile '';
 input a b x;
run;