如何在SAS中获取压缩数据集的未压缩精确大小(无需解压)
解决方案:直接从SAS压缩数据集的元数据提取精确未压缩大小
你完全可以不解压就拿到压缩数据集的精确未压缩大小——SAS在压缩数据集时,会把原始未压缩的总大小信息存储在数据集的元数据中,只是默认的PROC CONTENTS输出不会显示这个细节,用以下两种方法就能获取:
方法1:用PROC CONTENTS的DETAILS选项查看
添加DETAILS参数后,PROC CONTENTS会输出包含未压缩大小的详细信息,这个值是精确的,不是估算:
proc contents data=your_lib.your_compressed_dset details; run;
在输出的"Data Set Information"部分,你会看到类似这样的行:
Uncompressed Size: 629000000 bytes (约629MB)
方法2:用DATA步或ATTRN函数程序化提取
如果需要把这个值存到变量或者自动化处理,可以用SASHELP.VTABLE视图或者ATTRN函数直接读取元数据:
方式A:通过SASHELP.VTABLE查询
data _null_; /* 替换成你的库名和数据集名,注意大小写要匹配SAS的存储格式 */ set sashelp.vtable(where=(libname='YOUR_LIB' and memname='YOUR_DSET')); /* 转换为MB单位输出,也可以换成KB/GB */ uncomp_mb = nlobsize / (1024 ** 2); put "精确未压缩大小: " uncomp_mb 6.1 " MB"; run;
这里的NLOBSIZE变量存储的就是所有观测未压缩时的总字节数,是SAS压缩时计算好的精确值。
方式B:用ATTRN函数直接读取
data _null_; /* 打开数据集 */ dsid = open('YOUR_LIB.YOUR_COMPRESSED_DSET'); if dsid > 0 then do; /* 提取未压缩总大小(字节) */ uncomp_size = attrn(dsid, 'UNCOMPRESSED_SIZE'); uncomp_mb = uncomp_size / (1024 ** 2); put "精确未压缩大小: " uncomp_mb 6.1 " MB"; /* 关闭数据集 */ rc = close(dsid); end; run;
为什么之前的方法没拿到?
- 默认的
PROC CONTENTS不会显示未压缩大小,必须加DETAILS选项; - 如果你之前用
ATTRN只调用了'SIZE'参数,那拿到的是压缩后的数据集大小,而'UNCOMPRESSED_SIZE'才是你需要的原始精确值。
内容的提问来源于stack exchange,提问作者Mani Prakash T
相关产品推荐
相关产品推荐

