宏块或数据步之外的 SAS 宏函数
SAS macro functions outside of macro block or data step
我在掌握在 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
中已经调用的函数中嵌套函数语法正确。
如果有人可以向我推荐此特定“功能”的 explanation/documentation,那就太好了,
谢谢
为什么要在这里使用 %scan 功能?另外,还有%substr,所以需要用到%sysfunc。请参阅下面的代码:
%let models_list=MODEL_NAME_202101;
%let model_ds = %substr(&models_list,1,%eval(%length(&models_list)-7));
%put &model_ds;
这是您要找的吗?
关于最适合您的解决方案的节奏可能是正确的 - 但具体错误:
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,...)
我在掌握在 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
中已经调用的函数中嵌套函数语法正确。
如果有人可以向我推荐此特定“功能”的 explanation/documentation,那就太好了,
谢谢
为什么要在这里使用 %scan 功能?另外,还有%substr,所以需要用到%sysfunc。请参阅下面的代码:
%let models_list=MODEL_NAME_202101;
%let model_ds = %substr(&models_list,1,%eval(%length(&models_list)-7));
%put &model_ds;
这是您要找的吗?
关于最适合您的解决方案的节奏可能是正确的 - 但具体错误:
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,...)