2017-04-01 630 views
2

您如何向某人解释LENGTH声明中“字节”的含义?我一直认为1个字节等于1个字符或1个数字,但似乎并非如此。此外,为什么它的语法与FORMAT语句的语法不同?即:SAS LENGTH语句:什么是字节?

/*FORMAT Statement Syntax*/ 
FORMAT variable_name $8.; 

/*LENGTH Statement*/ 
LENGTH variable_name $ 8 

回答

4

语法不同,因为它们做不同的事情。语句LENGTH定义变量的类型以及将变量存储在数据集中需要多少空间。 FORMAT语句定义了要附加到变量的FORMAT,以便SAS在将值写入日志或输出窗口时知道如何变换变量。

在长度语句中的$意味着你要定义一个字符变量。格式语句中的$只是您附加到变量的格式名称的一部分。可与字符变量一起使用的格式以$开头,而数字格式不包含。格式需要有一段时间,以便SAS可以将它们与变量名称区分开来。但是在LENGTH语句中使用的长度是整数,所以不需要周期(尽管如果将它们添加到整数值之后,SAS将忽略它们)。

我看到SAS代码了很多混乱的地方FORMAT语句作为如果它的目的是定义变量。这仅适用于SAS,因为它会猜测如何在数据步骤中第一次出现时定义变量。所以它会使用你附加的格式的细节来猜测你的意思是什么类型的变量。所以,如果你在一个赋值语句x=2+3第一参考X,则SAS将猜测,X应的数字,并给它的8默认的长度,但如果看到X的第一个地方是在像format x $10.格式的语句,然后它会猜测你想要的使X长度为10的字符变量与格式的宽度匹配。

至于字符如何表示和存储这取决于你使用的是什么编码。如果你只使用简单的7位ASCII码,那么字符和存储它们需要多少字节之间存在1-1的关系。但是,如果您使用的是UTF-8,则最多可能需要4个字节来存储单个字符。

对于数值变量SAS使用IEEE 64位格式,以便用于存储变量和用于显示它的格式的宽度的长度之间的关系是复杂得多。最好将所有数字变量定义为长度8. SAS允许您定义长度小于8个字节的数字变量,但这意味着在将值写入SAS数据集时,会丢弃这些额外的精度位。当存储整数时,只要有足够的位可以存储所期望的最大数量,就可以在不降低精度的情况下执行此操作。对于浮点值,您将失去精度。