Для чего нужны пакеты при использовании PROC FCMP? - PullRequest
2 голосов
/ 25 октября 2010

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.

Разве это не способ использования пакетов? Я делаю что-то неправильно? Похоже да :) но я не вижу что. Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 октября 2010

Похоже, что спецификация package.function () в настоящий момент действительна только в proc fcmp, но не в шаге данных.Например, это работает (после создания функций, как вы сделали):

proc fcmp;
  a=test(3,3);
  b=pkg1.test(3,3);
  c=pkg2.test(3,3);
  put a= b= c=;
run;
1 голос
/ 26 октября 2010

В следующем техническом описании сказано, что невозможно получить шаг данных для использования функций с одинаковыми именами из нескольких пакетов в одном шаге данных (стр. 15 под заголовком «ХРАНЕНИЕ И ОБМЕН ФУНКЦИЯМИ»):

http://support.sas.com/resources/papers/proceedings09/147-2009.pdf

Тем не менее, он дает несколько альтернативных предложений.

Приветствие Rob

PS - Убедитесь, что вы проверили runubmit.com - Это похоже на переполнение стека, но только для вопросов, связанных с SAS.

...