1

proc fcmp函数允许将哈希对象作为参数传递。文档有点含糊,它没有提到此功能是否仅限于来自其他fcmp函数的调用,或者是否也允许来自数据步骤调用。

我试图在数据步骤中定义一个哈希,然后通过引用一个fcmp函数来传递该哈希。然而,当我尝试下面的代码时,它给了我:NOTE: Invalid type conversion而且我不确定我哪里出错了(或者这是否可能)。

option cmplib=work.funcs;

proc fcmp outlib=work.funcs.funcs;
  function test(h hash);
    return (0);
  endsub;
run;


data _null_;
  format pos best.;

  if _n_ eq 1 then do;
    declare hash h();
    rc = h.definekey('pos');
    rc = h.definedone();
    call missing (pos);
  end;

  xx = test2(h);
  put _all_;
run;

我试图这样做的原因是因为我希望最终有几个函数可以将同一个哈希表作为参数传递给它们。

4

1 回答 1

2

我不相信从数据步骤中这是可能的(很高兴看到该文档链接)。

但是 - 您可以在 fcmp 函数(或子例程)中创建一个哈希表,并且它将在每次后续调用中保留在那里,直到数据步骤结束。

如果您需要在不同的 fcmp 函数调用中保留该哈希表的状态,则创建一个通用子例程来包含该哈希表,并从您的不同函数调用中调用该子例程。

请注意,fcmp 中哈希表的实现是有限的(例如,没有诸如“有序”之类的属性,并且您不能将它们导出到数据集)。

于 2017-12-05T12:23:35.213 回答