嵌套的sysfunc + cat + leading 0已移除

时间:2017-06-12 20:43:08

标签: sas sas-macro

我尝试使用以下循环来管理三个表之间的动态追加。

但是,带有%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

2 个答案:

答案 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