PROC FCMP требует трехуровневый аргумент при указании выходного набора данных, в котором должна храниться скомпилированная функция / подпрограмма.
Но при использовании этих скомпилированных функций SAS требует двухуровневый аргумент для глобальной опции CMPLIB.
В документации сказано:
Примечание : имена подпрограмм и функций должны быть уникальными в пакете. Тем не мение,
разные пакеты могут иметь подпрограммы и функции с одинаковыми именами. Выбирать
Для конкретной подпрограммы при наличии неоднозначности введите префикс имени подпрограммы с помощью
имя пакета и точка (.) Например, чтобы получить версию обратного MthFncs,
использовать MthFncs.inverse
Но я не смог воспроизвести это поведение. При выполнении:
proc fcmp outlib=work.functions.pkg1;
function test(var1, var2);
return (var1+var2);
endsub;
run;
proc fcmp outlib=work.functions.pkg2;
function test(var1, var2);
return (var1*var2);
endsub;
run;
option cmplib=work.functions;
data _null_;
a=test(3,3);
b=pkg1.test(3,3);
c=pkg2.test(3,3);
put a= b= c=;
run;
Программа вылетает и говорит:
ERROR: DATA STEP Component Object failure. Aborted during the COMPILATION phase.
31 b=pkg1.test(3,3);
_________
557
ERROR 557-185: Variable pkg1 is not an object.
Разве это не способ использования пакетов? Я делаю что-то неправильно? Похоже да :) но я не вижу что.
Спасибо!