Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sas 嵌套sysfunc+;cat+;删除前导0_Sas_Sas Macro - Fatal编程技术网

Sas 嵌套sysfunc+;cat+;删除前导0

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

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

但是,带有%sysfuncs的嵌套cat从月份和日期中删除了零

有没有人能如此温和地解释一下什么地方不好用

我希望动态地声明这个表,例如

“FTP.TOTAL_4B_20170603”(yyyyymmdd)与代码检索不一样:“FTP.TOTAL_4B_201763”

谢谢你的帮助 胜过
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,这是按设计的,因为它使用最佳格式进行自动转换。要覆盖默认行为,必须显式定义值。其他人提出了下面的解决办法,但我想明确回答你的问题。