我有一个每天运行的SAS ETL过程,我使用控制表跟踪运行。我一直在使用我为每次运行生成的序列号。但是有更好的还是最佳实践?
我的生成run_id
的过程是:
data have;
input run_id date $;
datalines;
0 12dec2017
1 21jan2018
2 1feb2018
;
run;
proc sql; select max(run_id) into :id from have ; quit;
我得到max + 1并将其用作下一个run_id
。在上面的示例中,我的下一个run_id
将为3(2 + 1)。
答案 0 :(得分:2)
我建议使用日期时间戳作为run_id而不是序列,这样数字本身就会有意义;它可以是字符或数字,但采用此格式YYYYMMDDHHMMSS
,因此排序方式会更容易。
此代码将为您生成ID:
data new;
run_id=&id+1;
id_char="%sysfunc(today(),yymmddn8.)_%sysfunc(compress(%sysfunc(time(),time6.) ,:))";
id_num=%sysfunc(today(),yymmddn8.)%sysfunc(compress(%sysfunc(time(),time6.) ,:));
run;
输出:
run_id=3 id_char=20180517_1234 id_num=201805171234
答案 1 :(得分:1)
这样做:
proc sql; select max(run_id)+1 into :id from have ; quit;