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

时间:2014-10-08 23:07:53

标签: sql sas database-performance

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

相关问题:如果我有一个proc sql一个create table语句和多个insert语句,都是针对同一个表,那么SAS最终将覆盖输出表几次执行,还是聪明到足以一次完成所有写入?我们假设我没有连接到任何其他DBMS。

由于已经有2人发布了此消息,因此以下内容不是有效答案:

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

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

4 个答案:

答案 0 :(得分:1)

使用PROC SQL; UPDATE

更新行

使用PROC SQL; DELETE

删除

添加PROC APPENDPROC SQL; INSERT

答案 1 :(得分:0)

我找到了一个 - 但是有其他类似的方法可以覆盖行,或添加/删除变量吗?在append声明的帮助页面中:

  

APPEND语句绕过原始数据的处理   数据集并将新观察结果直接添加到原始结尾   数据集。

发现另一个 - 似乎remove语句可以按照我想要的方式删除行,但前提是我使用modify语句,我已经知道了。< / p>

答案 2 :(得分:-1)

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

drop语句从数据集中删除变量original_variable_A。 该行&#34; new_variable = 25;&#34;向数据集添加新变量。 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;

修订答案: 我认为&#34;临时文件&#34;的含义可能会出现混乱。如果通过临时文件表示工作目录中的数据集,我的原始答案就足够了。但是,如果您的意思是标准SAS数据集创建永久文件,如评论中所述......我认为您可以对视图上的proc数据集进行一些操作,这些操作肯定不会创建临时文件。 https://support.sas.com/rnd/base/Tipsheet_DATASETS.pdf

答案 3 :(得分:-1)

是。 假设我在“C:\ Temp”位置有一个数据集,其中包含名为customer_addr的客户地址。 您所要做的就是在数据步骤中引用相同的库和数据集,它将覆盖现有数据集,而不是将其放入工作库。

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