微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用带有月+年 (mmyy) SAS EG 的动态表名

如何解决使用带有月+年 (mmyy) SAS EG 的动态表名

请问有什么帮助吗? 当显示变量 vMonth 时,它是有效的,但是当将它与库名称连接时,得到以下问题。

计划:

%LET lastdayprevIoUsmonth = put(intnx('month',today(),-1,'E'),mmyyn4.);
%LET vMonth = cats('RM',&lastdayprevIoUsmonth); 
PROC sql;
SELECT &vMonth,*
FROM MASU.&vMonth
WHERE nsgr = '040';
QUIT;

日志文件

27         %LET lastdayprevIoUsmonth = put(intnx('month',mmyyn4.);
28         %LET vMonth = cats('RM',&lastdayprevIoUsmonth);
29        
30         PROC sql;
31        
32         SELECT &vMonth,*
33         FROM MASU.&vMonth
34         WHERE nsgr = '040';

NOTE: PROC sql set option NOEXEC and will continue to check the Syntax of statements.

NOTE: Line generated by the macro variable "VMONTH".

34          MASU.cats('RM',put(intnx('month',mmyyn4.))

                          _                                    _

                          79                                   79

                                                               200

ERROR 79-322: Expecting a ).

 

ERROR 200-322: The symbol is not recognized and will be ignored.

解决方法

宏代码只是做你告诉它做的事情。添加一些 %PUT 语句以查看您已将哪些值放入宏变量中。宏处理器不会像对待字符串 putcats 那样对待像 xyz123 这样的字符串。

如果您想在宏代码中调用 SAS 函数,您需要用 %sysfunc() 宏函数包装每个调用。并非所有函数都可以这样调用。特别是使用类型特定的版本代替灵活的 PUT() 和 INPUT() 函数。但在这种情况下,您可以只使用 %SYSFUNC() 调用的格式参数而不是函数调用。不要在字符串文字中包含引号,对于宏处理器来说,一切都是字符串文字。

使用这个:

%LET lastdaypreviousmonth=%sysfunc(intnx(month,%sysfunc(today()),-1,E),mmyyn4.);

无需在宏代码中使用 CAT...() 函数。要连接宏变量值,只需将它们展开到您希望它们出现的位置即可。

%LET vMonth = RM&lastdaypreviousmonth.;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。