我正在尝试动态指定哈希表的密钥。以下示例运行正常,您可以看到我通过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.
我已尝试过单/双引号,空格与逗号等的所有组合,以便在没有任何运气的情况下正常工作。有没有人能够做到这一点?
我正在寻找非宏观解决方案,谢谢。
答案 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;
我还没有测试过它,请告诉我它是否有帮助。