无法使用IN在fcmp函数中搜索数组



我有一个带有数组的fcmp函数,但IN运算符似乎不起作用。我做错了什么?

proc fcmp outlib=mylib.UserFuncLib.dateFuncs;
function previousWorkingDayDate(dateWeekday);
* Not a weekend and not a bank holiday;
dayBefore = intnx('Day',dateWeekday,-1);
* Array of bank holidays, needs to be kept updated;
array bankHolidays[9] / nosymbols 
('03Jan2022'd '15Apr2022'd '18Apr2022'd '02May2022'd 
'02Jun2022'd '03Jun2022'd '29Aug2022'd '26Dec2022'd 
'27Dec2022'd );
do while ((dayBefore in bankHolidays) or weekday(dayBefore) < 2 or weekday(dayBefore) > 6);
dayBefore = intnx('Day',dateWeekday,-1);
end;
return(dayBefore);
endsub;

bankHolidays中的代码dayBefore给出错误79-322:应为(./strong>

救命!谢谢

我认为这只是FCMP中不支持的SAS语法的一个例子。事实上,我认为SAS知道这一点。。。当我稍微更改它以包含括号时,错误消息告诉我:

80             do while ((dayBefore in (bankHolidays) or weekday(dayBefore) < 2 or weekday(dayBefore) > 6));
ERROR: The array 'bankHolidays' cannot be an argument of the 'IN' operation.

从FCMP文件中,我认为这是更明确的陈述:

PROC FCMP中使用的ARRAY语句不支持DATA步骤中ARRAY声明的所有功能。以下是仅适用于PROC FCMP:的差异列表

  • 所有数组引用都必须具有显式下标表达式

你可以用几种不同的方法来解决这个问题;最简单的方法就是对它进行迭代(甚至编写另一个FCMP函数来为您执行此操作(,或者使用宏变量。

如果你真的打算这么做,你可以直接询问SAS(support@SAS.com(,看看他们是否能给你一个明确的答案,告诉你是否有直接的方法。

最新更新