最佳实践 - 为我的 SAS ETL 生成 RUN_ID
Best Practice - To generate a RUN_ID for my SAS ETL
我有一个每天 运行s 的 SAS ETL 过程,我使用控件 table 跟踪 运行。我一直在使用我为每个 运行 生成的序列号。但是有更好的或最佳实践吗?
我生成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).
我建议使用日期时间戳作为 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
这样做:
proc sql; select max(run_id)+1 into :id from have ; quit;
我有一个每天 运行s 的 SAS ETL 过程,我使用控件 table 跟踪 运行。我一直在使用我为每个 运行 生成的序列号。但是有更好的或最佳实践吗?
我生成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).
我建议使用日期时间戳作为 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
这样做:
proc sql; select max(run_id)+1 into :id from have ; quit;