我有一个大小接近 20 GB 的 SAS 数据集,我正在尝试使用 where 子句,但由于数据集的大小正在膨胀,我无法这样做,并且我收到错误消息:SAS 文件已满。当我上次查看在库中创建的数据集时,大小接近 45GB。我的代码是:
data fin2;
set fin;
where segment = "a";
run;
段有 2 个可能的值 a 和 b(a 接近 50% 的行)
谁能告诉我发生了什么以及为什么数据集的大小会增加。我也尝试使用 if 命令执行此操作,但无济于事。
我有一个大小接近 20 GB 的 SAS 数据集,我正在尝试使用 where 子句,但由于数据集的大小正在膨胀,我无法这样做,并且我收到错误消息:SAS 文件已满。当我上次查看在库中创建的数据集时,大小接近 45GB。我的代码是:
data fin2;
set fin;
where segment = "a";
run;
段有 2 个可能的值 a 和 b(a 接近 50% 的行)
谁能告诉我发生了什么以及为什么数据集的大小会增加。我也尝试使用 if 命令执行此操作,但无济于事。
您提供的代码创建新数据集,fin2
保持现有数据集fin
不变。所以我假设你对fin
拥有 20GB 和fin2
45GB 不满意。
我希望fin
是较早创建的,未存储在 WORK 库中,并且启用了一些压缩选项。要验证,请检查以下输出:
proc contents data=fin;run;
相反,我希望fin2
未启用压缩。
要减小fin2
表的大小,请尝试使用char
或binary
压缩选项:
data fin_segment_a (compress=char);
set fin;
where segment = "a";
drop segment;
run;