SAS宏函数在宏块或数据步之外



我在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;

这是你要找的吗?

最新更新