Понимание аргумента Keysum объекта SAS ha sh - PullRequest
0 голосов
/ 06 марта 2020

Просмотр объекта объявления SAS Ha sh Do Do c Я могу прочитать следующее о редко используемом аргументе Keysum: It "задает имя переменной, которая отслеживает ключ Сводка по всем ключам. Сводка по ключу - это счетчик количества обращений к ключу при вызове метода FIND. " , Рассмотрим небольшой пример ниже. Если бы do c был точным, Keysum был бы равен 2 (вызов метода 2 * find ()) в наборе тестовых данных. Однако оно равно 10.

data _null_;
   declare hash h (suminc : 's', keysum : 'keysum');
   h.definekey ('k');
   h.definedone ();

   k = 1;
   s = 2;
   keysum = 0;

   h.add ();
   h.ref ();
   h.ref ();

   h.find ();
   h.find ();

   h.output (dataset : 'test');
run;

Вот мое собственное толкование. Переменная, указанная в теге аргумента Keysum, увеличивается на значение переменной sumin c каждый раз, когда на ссылку ссылается метод Add (), Ref () или Find (). Для выполнения приращения должен быть хотя бы один вызов метода find (). В противном случае Keysum не увеличивает значение (уберите два вызова метода find () выше и проверьте).

Моя интерпретация заключается в том, чтобы просто поиграться с приведенным выше кодом ..

Итак, что более важно, моя интерпретация или документация?

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

@ Ричард, спасибо.

Согласны ли вы с тем, что для части инициализации метод Ref () также инициализирует значение Keysum? См. Приведенный ниже код.

data _null_;
   declare hash h (suminc : 's', keysum : 'keysum');
   h.definekey ('k');
   h.definedone ();

   k = 1;
   s = 2;
   keysum = 0;

   h.ref ();

   h.find ();
   h.find ();

   h.output (dataset : 'test');
run;

Кроме того, правильно ли я, что метод Find () должен присутствовать для инициализации и увеличения значения Keysum? Например, Keysum = 0 в выходных данных, установленных ниже

data _null_;
   declare hash h (suminc : 's', keysum : 'keysum');
   h.definekey ('k');
   h.definedone ();

   k = 1;
   s = 2;
   keysum = 0;

   h.add ();

   h.output (dataset : 'test');
run;

Также, я согласен, было бы неплохо повысить сложность примеров в Do c.

0 голосов
/ 06 марта 2020

Справочная запись "Ведение основных резюме" объясняет концепцию лучше, чем другие части документации. Мой полужирный

Этот тег SUMIN C указывает объекту ha sh выделить внутреннее хранилище для хранения суммарного значения для каждого ключа.

итоговое значение ключа ha sh равно , инициализированному значением переменной SUMIN C всякий раз, когда используется метод ADD или REPLACE.

Суммарное значение га sh ключ увеличивается на значение переменной SUMIN C всякий раз, когда используется метод FIND, CHECK или REF.

Обратите внимание, что переменная SUMIN C может быть отрицательной, положительное или нулевое значение. Переменная не обязательно должна быть целым числом. Значение SUMIN C для ключа по умолчанию равно нулю.

Я не уверен, почему обычно почти безупречная команда документации не стоит поверх других неполных или неточных утверждений, касающихся SUMIN C.

Код примера документации довольно симпатичен Микки Маусу, и лучшими примерами SUMIN C будут:

  • с использованием ha sh для вычисления таблицы взвешенных частот (Выходной набор данных имеет freq as keysum)
  • вычисление промежуточной суммы в операторе главной книги. (Извлеките сумму с помощью .SUM())
  • с выводом суммы связанных финансовых транзакций (Выходной набор данных содержит итоговую сумму ключей)
...