Sas 嵌套sysfunc+;cat+;删除前导0
我正在尝试使用下面的循环来管理三个表之间的动态追加 但是,带有%sysfuncs的嵌套cat从月份和日期中删除了零 有没有人能如此温和地解释一下什么地方不好用 我希望动态地声明这个表,例如 “FTP.TOTAL_4B_20170603”(yyyyymmdd)与代码检索不一样:“FTP.TOTAL_4B_201763” 谢谢你的帮助 胜过Sas 嵌套sysfunc+;cat+;删除前导0,sas,sas-macro,Sas,Sas Macro,我正在尝试使用下面的循环来管理三个表之间的动态追加 但是,带有%sysfuncs的嵌套cat从月份和日期中删除了零 有没有人能如此温和地解释一下什么地方不好用 我希望动态地声明这个表,例如 “FTP.TOTAL_4B_20170603”(yyyyymmdd)与代码检索不一样:“FTP.TOTAL_4B_201763” 谢谢你的帮助 胜过 D不确定为什么在数据步骤中有proc append和proc sort,但我认为下面的宏表达式可能会有所帮助: %MACRO J; %DO I=1 %T
D不确定为什么在
数据
步骤中有proc append
和proc sort
,但我认为下面的宏表达式可能会有所帮助:
%MACRO J;
%DO I=1 %TO 2;
%put FTP.TOTAL_4B_%sysfunc(intnx(DAY,%sysfunc(today()),-&I.,S),yymmddn8.);
%END;
%MEND J;
%J;
不确定为什么在
数据
步骤中有proc append
和proc sort
,但我认为下面的宏表达式可能会有所帮助:
%MACRO J;
%DO I=1 %TO 2;
%put FTP.TOTAL_4B_%sysfunc(intnx(DAY,%sysfunc(today()),-&I.,S),yymmddn8.);
%END;
%MEND J;
%J;
您可以使用格式来获取日期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
您可以使用格式来获取日期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
是的,CAT_uu系列函数确实去掉了前导0,这是按设计的,因为它使用最佳格式进行自动转换。要覆盖默认行为,必须显式定义值。其他人建议了下面的解决方法,但我想明确回答你的问题。是的,CAT_uu函数族确实会去掉前导0,这是按设计的,因为它使用最佳格式进行自动转换。要覆盖默认行为,必须显式定义值。其他人提出了下面的解决办法,但我想明确回答你的问题。