检查是否存在数据集

时间:2018-06-20 23:39:09

标签: sas

我刚刚完成了我正在进行的项目的主宏。它生成一行以输入另一个表。因此,我的下一步是编写另一个调用该宏的宏。下一个宏的参数之一是要在其中插入新观测值的数据集的名称,这引出了我的问题...

我想让我的下一个宏检查并查看命名数据集是否存在。如果是这样,它将把新计算的线插入到数据集中。如果还不存在,我想用该名称将新行另存为数据集。

为了更具体一点,让我们假设我有宏 %calculate_for(ARG1,ARG2,ARG3)创建一个单观测数据集NEXT_LINE。我想编写一个类似以下内容的宏:

%macro do_for(ARG1, ARG2, ARG3, DATASET_NAME);

  %calculate_for(&ARG1, &ARG2, &ARG3)

  {if DATASET_NAME exists then do:}
  data &DATASET_NAME;
    set &DATASET_NAME
        NEXT_LINE;
    run;

  {if DATASET_NAME doesn't exist yet then do:}
  data &DATASET_NAME;
    set NEXT_LINE;
    run;
%mend;

我该如何在SAS中做到这一点?

1 个答案:

答案 0 :(得分:2)

宏函数%SYSFUNC可用于调用几乎所有DATA步骤函数。

例如

%macro …;

  data &out;
    set
      %if %sysfunc (EXIST(&OUT,DATA)) %then %do;
      &OUT
      %end;
      NEXT_LINE;
    ;
  run;

%mend;

同样,%SYSCALL例程可用于调用几乎所有CALL例程。

正如@Reeza所说,对于您问题中的特定编码情况,Proc APPEND可能是更好的选择。示例代码中显示的模式将导致基本表的整个重写。

其他不重写整个数据集的编码模式包括

  • 数据步骤:MODIFY条语句,后接OUTPUTREPLACEREMOVE条语句
  • Proc SQL:INSERT INTOSELECT … FROM

如果您要进行大量开发,也许不要在每一步都重新创建轮子。看看具有通用实用程序功能的SAS宏库,其中一个示例Roland's SAS® Macros