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就地更新目标表,而不是创建临时文件?