SAS 仅在有可用数据时才创建表

问题描述 投票:0回答:1

我在 SAS 中有一些数据正在执行 QA。我知道我可以使用 IF 语句等将数据输出到不同的表。我想要做的是将数据输出到名为“error_data”的表(如果检查失败);但是,如果错误表中没有任何内容,我不希望创建错误表。

例如

data good_data1 error_data1;
  set sashelp.cars;
  if drivetrain in("Front", "Rear", "All") then output good_data1;
  else output error_data1;
run;

在此示例中,我希望不创建或删除表“error_data”,因为其中没有结果。

我使用的数据将使用宏对多个不同的表执行这种检查,因此将有多个版本的“good_data”和“error_data”。我只想查看“输出数据”列表中的“error_data”表(如果其中有内容),这样我就不必单击它的每个版本来查看其中是否有任何项目。

此处理将被包装在宏中,因此如果需要另一个步骤从“输出数据”列表中删除“error_data”(如果它不包含任何观察结果),那么就可以了。

sas output sas-macro data-quality
1个回答
0
投票

无论是否存在错误,数据集都会被创建,但您可以通过检查观察数是否为 0 来轻松删除它。您可以创建一个宏函数,对任何给定的数据集执行此操作。

%macro delete_data(data);
    %let dsid = %sysfunc(open(&data));
    %let nobs = %sysfunc(attrn(&dsid, nlobs));
    %let rc   = %sysfunc(close(&dsid));

    %if(&nobs = 0) %then %do;
        %put NOTE: &data has no observations and will be deleted.;
        proc delete data=&data;
        run;
    %end;
%mend;

data good_data1 error_data1;
  set sashelp.cars;
  if drivetrain in("Front", "Rear", "All") then output good_data1;
  else output error_data1;
run;

%delete_data(error_data1);
NOTE: error_data1 has no observations and will be deleted.

NOTE: Deleting WORK.ERROR_DATA1 (memtype=DATA).
NOTE: PROCEDURE DELETE used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
© www.soinside.com 2019 - 2024. All rights reserved.