我在 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”(如果它不包含任何观察结果),那么就可以了。
无论是否存在错误,数据集都会被创建,但您可以通过检查观察数是否为 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