Sql 我是否可以在不创建临时文件的情况下修改现有SAS数据集?

Sql 我是否可以在不创建临时文件的情况下修改现有SAS数据集?,sql,sas,database-performance,Sql,Sas,Database Performance,除了modify语句外,是否有其他方法修改SAS数据集的内容(即更改值,或添加或删除行或列)不涉及在工作中创建临时文件,然后替换整个原始文件 相关问题:如果我有一个proc-sql,其中有一个create-table语句和多个insert语句,所有语句都指向同一个表,那么SAS会在执行过程中多次覆盖输出表吗,或者它是否足够聪明,可以一次完成所有写入操作?假设我没有连接到任何其他DBMS 由于已经有2人发布了此消息,以下答案无效: data lib.dsn; set lib.dsn; /*

除了
modify
语句外,是否有其他方法修改SAS数据集的内容(即更改值,或添加或删除行或列)不涉及在工作中创建临时文件,然后替换整个原始文件

相关问题:如果我有一个
proc-sql
,其中有一个
create-table
语句和多个
insert
语句,所有语句都指向同一个表,那么SAS会在执行过程中多次覆盖输出表吗,或者它是否足够聪明,可以一次完成所有写入操作?假设我没有连接到任何其他DBMS

由于已经有2人发布了此消息,以下答案无效:

data lib.dsn;
  set lib.dsn;
  /*Insert logic here*/
run;

如果执行此操作,SAS将创建一个临时文件,并在数据步骤完成后替换原始lib.dsn。如果中断此类数据步骤,日志中将出现错误,但原始数据集将保持不变。

我找到了一个-但是是否有其他类似的方法用于覆盖行或添加/删除变量?从
append
语句的帮助页面:

APPEND语句绕过对原始文件中数据的处理 数据集,并将新观测值直接添加到原始数据集的末尾 数据集

找到另一个-似乎
remove
语句可以按照我想要的方式删除行,但前提是我使用的是我已经知道的
modify
语句。

原始答案: 添加/删除列或添加/删除行都可以通过数据步骤完成

drop语句从数据集中删除变量original_variable_A。 行“new_variable=25;”向数据集添加一个新变量。 do循环添加新行。 where子句删除不满足所述条件的所有行

data libname.permanent_data;
    set libname.permanent_data;
    drop original_variable_A;
    new_variable = 25;
    do i = 1 to 2;
        original_variable_B = 3;
        new_variable = 2;
        output;
    end;
    where original_variable_B <= 50;
run;
data libname.permanent\u数据;
设置libname.permanent_数据;
删除原始变量;
新的_变量=25;
i=1到2;
原始变量_B=3;
新的_变量=2;
产出;
结束;
其中原始变量是。
假设我在位置“C:\Temp”中有一个数据集,其中包含名为customer\u addr的客户地址。
您所要做的就是在数据步骤中引用相同的库和数据集,它将覆盖现有的数据集,而不是将其放入工作库

libname Customers 'C:\Temp';
data Customers.customer_addr;
set Customers.customer_addr;
*do some logic here to remove or filter rows/columns;
run;

使用
PROC-SQL更新行;更新

PROC-SQL删除;删除


添加
PROC-APPEND
PROC-SQL;插入

IMHO只有一种方法可以找到:填充或禁用(?)saswork并查看发生了什么。SAS不符合ACID,它可能依赖主机操作系统的文件系统操作来模拟其中的一部分,当然还有协同锁定。我想我可以删除我自己对工作目录的写访问权限,看看SAS是否能够在其他地方修改数据集-感谢您的建议。这将创建一个临时文件,这将替换原始文件AFAIK。经过反思,如果您创建的是视图而不是数据集,从技术上讲,这可能是正确的答案。错误-如果您这样做,SAS将创建一个临时文件,然后在执行完成后替换原始文件。您是否可以引用源或提供测试结果,指示SAS就地更新目标表,而不是创建临时文件?