我正在尝试估算SAS文件夹中所有表的大小。有没有人知道长度= 1的字符字段和长度= 1的数字字段的大小?一旦确定,我计划将列的长度乘以列数,然后乘以记录数来估计表的大小。
上述陈述可能不清楚,因此我将用一个例子来澄清。假设长度= 1的字符字段是1个字节,长度= 1个字节的数字字段,则100个记录和2个列,将被计算为200个字节(1 * 2 * 100)。
感谢。
答案 0 :(得分:2)
字符字段是每个长度一个字节;例如,length x $1
是一个字节。但是,它们对于每一行都是恒定的宽度,除非使用了一些压缩 - 所以如果它是length x $8
但是x ='嗨',它仍然需要8个字节(技术上,X =&#39 ;嗨')。格式通常用于定义字符变量的默认长度,但可以使存储长度与格式化长度不同(尽管它通常是一个错误)。
默认情况下,数字字段的宽度为8个字节,与格式化的宽度无关(即,format x BEST12.
仍需要8个字节进行存储,就像format x 2.
那样。您可以通过length
将其更改为较小的数量,但会丢失精度;它可以只有3个字节。它在标准SAS中永远不会超过8个字节(我认为DS2
你现在可以拥有更大的数字?)。
关于估算餐桌大小的主题:
如果您已创建表格,则可以从PROC CONTENTS
或dictionary.tables
确定其记录长度。 "观察长度" (obslen
)是用于存储每个观察(行)的字节数; " BUFSIZE"是缓冲区大小,它确定每页数据的大小(行完全存储在页面上,而不是跨页面,因此您需要确定页面中适合的行数,即Bufsize / ObsLen。
存储元数据需要一些额外的开销,通常是一页额外的,但这会让你非常接近。
为此目的创建了几个宏; user667489链接到SUGI 27中标题为A New Method to Estimate the Size of a SAS® Data Set的评论中的一个.Michael Raithel还为其文档Size_The_Data.sas中链接的SAS创建了一个宏。