Error handling 检查proc append是否成功

Error handling 检查proc append是否成功,error-handling,sas,Error Handling,Sas,我有一些代码使用proc append将昨天的数据附加到[大数据集]。执行此操作后,它将另一个数据集中变量“latest_date”的值更改为昨天的日期,从而在[large dataset]中显示最大日期值,而无需耗时的数据步骤或过程sql 如何在使用proc append的同一程序中检查proc append是否成功(无错误)?我的目标是仅当追加成功时才更改此辅助数据集中的“latest_date”变量。尝试自动宏变量&SYSCC data test; do i=1 to 10; ou

我有一些代码使用proc append将昨天的数据附加到[大数据集]。执行此操作后,它将另一个数据集中变量“latest_date”的值更改为昨天的日期,从而在[large dataset]中显示最大日期值,而无需耗时的数据步骤或过程sql


如何在使用proc append的同一程序中检查proc append是否成功(无错误)?我的目标是仅当追加成功时才更改此辅助数据集中的“latest_date”变量。

尝试自动宏变量
&SYSCC

data test;
do i=1 to 10;
    output;
end;
run;

data t1;
i=11;
run;

data t2;
XXX=12;
run;

proc append base=test data=t1;
run;

%put &syscc;

proc append base=test data=t2;
run;

%put &syscc;

我正在使用我找到的
%get\u table\u size
宏。我的脚步很快

  • 运行
    %get\u table\u size(大表,大小\u preappend)
  • 创建名为
    的数据集以添加
  • 运行
    %get\u table\u size(to\u append,append\u size)
  • 运行
    proc append
  • 运行
    %get\u table\u size(大表,大小\u postappend)
  • 检查是否
    &size\u postpappend=&size\u preappend+&append\u size

  • 使用
    &syscc
    并不是我想要的,因为它没有专门检查
    proc append
    中的错误。早期的错误可能会导致此错误。

    您可以通过计算追加前后表中的记录数来完成此操作。这将适用于任何sas表或数据库。 最佳实践是始终为您的进程设置控制表,以记录运行时间和读取的记录数

    代码:

    输出:更新控制表

    该宏仅适用于SAS数据集(而不是数据库表)。您也无法知道是否有其他进程同时更新了基表
    syscc
    是一种优越的方法,我想。谢谢。与我在回答中链接到的宏相比,检查记录数的sql
    count(*)
    方法非常耗时。请注意,如果要独立测试每个过程,则需要在过程步骤之前重置SYSRC宏变量。否则,即使下一步成功,宏变量也会保留错误代码。
    /*Create input data*/
    data work.t1;
    input row ;
    datalines;
    1
    2
    ;;
    run;
    data work.t2;
    input row ;
    datalines;
    3
    ;;
    run;
    
    /*Create Control table, Run this bit only once, otherwise you delete the table everytime*/
    data work.cntrl;
    length load_dt 8. source 8. delta 8. total 8. ;
    format load_dt datetime21.;
    run;
    proc sql; delete * from work.cntrl; quit;
    
    /*Count Records before append*/
    proc sql noprint ; select count(*) into: count_t1 from work.t1; quit;
    proc sql noprint; select count(*) into: count_t2 from work.t2; quit;
    
    /*Append data*/
    proc append base=work.t1 data=work.t2 ; run;
    
    /*Count Records after append*/
    proc sql noprint ; select count(*) into: count_final from work.t1; quit;
    
    /*Insert counts and timestampe into the Control Table*/
    proc sql noprint; insert into work.cntrl 
    /*values(input(datetime(),datetime21.), input(&count_t1.,8.) , input(&count_t2.,8.) , input(&count_final.,8.)) ; */
    values(%sysfunc(datetime()), &count_t1. , &count_t2., &count_final.) ; 
    quit;