SAS哈希表中的动态.defineKey语句

时间:2015-03-30 20:25:34

标签: sas

我正在尝试动态指定哈希表的密钥。以下示例运行正常,您可以看到我通过key_list变量指定密钥:

data ht;

  set sashelp.class;

  key_list = 'name';

  if _n_ eq 1 then do;
    declare hash ht(dataset:"sashelp.class");
    ht.defineKey(key_list);
    ht.defineDone();
  end;

  rc = ht.find();

run;

但是下面的改变:

key_list = 'name,sex';

...产生警告:

ERROR: Undeclared key symbol name,sex for hash object at line 6144 column 9.
ERROR: DATA STEP Component Object failure.  Aborted during the EXECUTION phase.

我已尝试过单/双引号,空格与逗号等的所有组合,以便在没有任何运气的情况下正常工作。有没有人能够做到这一点?

我正在寻找非宏观解决方案,谢谢。

1 个答案:

答案 0 :(得分:7)

密钥列表始终会引用以逗号分隔的列。所以看看你想要做什么,我想尝试做类似的事情,并引用整个字符串,然后当使用definekey时,我们可以使用dequote函数来删除应用于整个字符串的引号应该有所帮助。以下是我认为应该有所帮助的变化。

data ht;
  set sashelp.class;
  key_list =  "'name','sex'" ;
  if _n_ eq 1 then do;
    declare hash ht(dataset:"sashelp.class");
    ht.defineKey(dequote(key_list));
    ht.defineDone();
  end;
  rc = ht.find();
run;

我还没有测试过它,请告诉我它是否有帮助。