我尝试使用以下循环来管理三个表之间的动态追加。
但是,带有%sysfuncs的嵌套cat从月和日删除了零
会有人如此温和地解释这里的工作不正常吗?
我希望动态声明表格,例如,
" FTP.TOTAL_4B_20170603" (yyyymmdd)而不是代码正在重审:" FTP.TOTAL_4B_201763"
data dd; %MACRO H;
%DO I=1 %TO 2;
proc append
base=prod0
data=FTP.TOTAL_4B_%sysfunc(CATS(%sysfunc(year(%sysfunc(intnx(day,%sysfunc(today()),-&i,s)))),
%sysfunc(putn(%sysfunc(month(%sysfunc(intnx(day,%sysfunc(today()),-&i,s)))),z2.)),
%sysfunc(putn(%sysfunc(day(%sysfunc(intnx(day,%sysfunc(today()),-&i,s)))),z2.))));
run;
%end;
proc sort data=prod0;
by pan fecha;
run;
%MEND H;
%H;
run;
感谢您的帮助 贝斯茨 d
答案 0 :(得分:3)
不确定为什么 Incident_ID Common Case_ID Name
0 1 Apple 1.1 Peter
1 1 Apple 1.2 Sally
2 2 Banana 2.1 Sam
3 2 Banana 2.2 Juliet
和proc append
在 proc sort
步骤中,但我认为下面的宏表达可能有所帮助:
data
答案 1 :(得分:0)
您可以使用格式来获取日期YYYYMMDD。如果你只想在几天内迭代,也不需要intnx。 date()返回整数,因此您可以轻松使用加法/减法。
%MACRO test;
%DO I=1 %TO 2;
%let test_date=%sysfunc(putn(%sysfunc(date()) - &i, yymmddn8.));
%put DS name FTP.TOTAL_4B_&test_date;
%end;
%MEND test;
%test;
给出结果
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
59
60
61
62
63 %MACRO test;
64 %DO I=1 %TO 2;
65 %let test_date=%sysfunc(putn(%sysfunc(date())-&i, yymmddn8.));
66 %put DS name FTP.TOTAL_4B_&test_date;
67 %end;
68 %MEND test;
69
70 %test;
DS name FTP.TOTAL_4B_20170612
DS name FTP.TOTAL_4B_20170611
71
72 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
84