检查proc附加是否成功
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查proc附加是否成功相关的知识,希望对你有一定的参考价值。
我有一些代码使用proc append将昨天的数据附加到[large dataset]。执行此操作后,它会将另一个数据集中变量“latest_date”的值更改为昨天的日期,从而显示[large dataset]中的最大日期值,而不需要耗费时间的数据步骤或proc 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_table_size
宏,我找到了here。我的步骤是
- 运行
%get_table_size(large_table, size_preappend)
- 创建名为
to_append
的数据集 - 运行
%get_table_size(to_append, append_size)
- 运行
proc append
- 运行
%get_table_size(large_table, size_postappend)
- 检查
&size_postappend = &size_preappend + &append_size
使用&syscc
并不是我想要的,因为它没有专门检查proc append
中的错误。它可能会因早期错误而被抛弃。
另一答案
您可以通过计算表中前后附加的记录数来完成此操作。这适用于任何sas表或数据库。最佳做法是始终为您的进程提供控制表,以记录运行时间和读取的记录数。
码:
/*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;
以上是关于检查proc附加是否成功的主要内容,如果未能解决你的问题,请参考以下文章