LINUX 上的 SAS 数据集大小在删除行后没有改变

SAS dataset size on LINUX is not changing after deleting rows

我在 LINUX 上有 100GB 的 SAS 数据集。 Space 从数据集中删除 50 GB 数据后分配给数据集的数据仍然是 100 GB。 我不确定这是否与 SAS 或 LINUX.

有关

下面的代码正在执行删除:

Proc SQL; Delete * from dataset where Column=value; Quit;

问题是您执行的是逻辑删除而不是物理删除。 Gordon 将您指向 SAS Note 32042 的正确评论给出了对此行为的相当简洁的官方描述。 物理删除已删除记录的最简单方法是从当前文件重新创建数据文件,这将导致 SAS 清理逻辑删除的观察值。 这可能类似于以下代码模式之一。

data mydata;
set mydata;
run;

proc sql;
create table mydata as
select * from mydata;
quit;

正如其他人所说,PROC SQL DELETE 执行逻辑删除,而不是物理删除。

虽然您可以分两步完成此操作,但在数据步骤中执行此操作会更快(因此您只有一步)。如果您的 DELETE 是一个简单的 where 子句:

data have;
  set have;
  where column ne value;
run;

WHERE 子句使用 SQL 语法,因此 LIKE 和 BETWEEN 等在那里是合法的。这会将删除处理为物理删除,并且您的新数据集会更小。