将哈希对象作为FCMP参数传递

时间:2017-12-04 23:32:34

标签: sas fcmp sas-hash

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;

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

1 个答案:

答案 0 :(得分:1)

我不相信这可以从数据步骤开始(很高兴看到文档链接)。

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

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

请注意,fcmp中哈希表的实现是有限的(例如,没有诸如' ordered'之类的属性,您无法将它们导出到数据集)。