SAS - 大小字符和数字

标签 sas

我正在尝试估计 SAS 文件夹中所有表的大小。有谁知道长度=1的字符字段和长度=1的数字字段的大小?一旦弄清楚,我计划将列的长度乘以列数,然后乘以记录数来估计表的大小。

上面的说法可能不太清楚,所以我用一个例子来澄清。假设长度=1的字符字段为1字节,长度=1字节的数字字段,那么100条记录和2列,将被计算为200字节(1*2*100)。

谢谢。

最佳答案

字符字段每个长度一个字节;例如,length x $1 是一个字节。但是,除非使用某种压缩,否则它们每行的宽度都是恒定的 - 因此,如果它是 length x $8 但 x='Hi',它仍然需要 8 个字节(从技术上讲,X='Hi ' )。格式通常用于定义字符变量的默认长度,但存储长度可能与格式化长度不同(尽管这通常是一个错误)。

数字字段默认为 8 字节宽,无论格式化宽度如何(即 format x BEST12. 仍然需要 8 个字节来存储,就像 format x 2.会)。您可以通过 length 将其更改为较小的值,尽管您会失去精度;它可以小至 3 个字节。在标准 SAS 中它永远不会超过 8 个字节(我认为在 DS2 中您现在可以拥有更大的数字?)。

关于估计表大小的主题: 如果您已经创建了一个表,则可以从 PROC CONTENTSdictionary.tables 确定其记录长度。 “观察长度”(obslen) 是用于存储每个观察(行)的字节数; “Bufsize”是缓冲区大小,它决定了每页数据的大小(行完全存储在页上,而不是跨页,因此需要确定一页适合多少行,即Bufsize/ObsLen。

存储元数据需要一些额外的开销,通常是额外的一页,但这会让您相当接近。

为此目的创建了几个宏; user667489 链接到标题为 A New Method to Estimate the Size of a SAS® Data Set 的评论中的一个来自 SUGI 27。Michael Raithel 还为 SAS 创建了一个宏,该宏在其文档 Size_The_Data.sas 中链接。 .

关于SAS - 大小字符和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25491142/

相关文章:

sql - SAS/SQL - 使用自定义函数创建 SELECT 语句

sas - 使用 SAS 对多列求和

r - sas 日期时间到 R 日期格式

sas - 计算数据线后的变量

oracle - 读取Oracle数据库时,在Proc SQL的where子句中使用数据集观察

sas - 选择数据步骤中具有最大值的观测值

sas - 缺失值被认为是SAS中的最低值?

sas - 在 SAS 中按组处理

excel - SAS中每列分为​​子列时如何导入excel文件

sas - 宏变量在 DATA 步中具有不同的值。为什么?