我在SAS中使用函数时遇到了问题,语法令人困惑。
我想在最后得到没有日期的名字。例如,我有这样的内容:"MODEL_NAME_202101"我想要&;model_name &;
我就是这样做的。
%let model_ds =
%sysfunc(
substr(
%scan(&models_list, 12),
0,
%length(%scan(&models_list, 12)) - 7
)
);
%put &model_ds;
我得到的只是一个交战,它没有告诉我我犯了什么语法错误。
WARNING: Argument 2 to function SUBSTR referenced by the %SYSFUNC or %QSYSFUNC macro function is out of range.
不知道我应该如何嵌套函数调用。是否每个调用都需要在调用之前有%sysfunc
,或者在%sysfunc
中已经调用的函数中嵌套函数是否语法正确?
如果有人能给我介绍一下这个特定的"功能"的解释/文档,那就太好了,
谢谢
Rhythm可能是最适合你的正确解决方案-但具体错误:
WARNING: Argument 2 to function SUBSTR referenced by the %SYSFUNC or %QSYSFUNC macro function is out of range.
这是因为:
substr(...,0,...)
第二个参数是"从什么位置开始"。SAS是基于1的,而不是基于0的(您最初是python开发人员吗?这可能有点挑战性!),所以它永远不需要低于1。
substr(...,1,...)
为什么在这里使用%scan函数?此外,还有%substr,所以需要使用%sysfunc。参见下面的代码:
%let models_list=MODEL_NAME_202101;
%let model_ds = %substr(&models_list,1,%eval(%length(&models_list)-7));
%put &model_ds;
这是你要找的吗?