我试图动态指定哈希表的密钥.下面的示例工作正常,您可以看到我通过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;
Run Code Online (Sandbox Code Playgroud)
但以下变化:
key_list = 'name,sex';
Run Code Online (Sandbox Code Playgroud)
...产生警告:
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.
Run Code Online (Sandbox Code Playgroud)
我已经尝试了单/双引号,空格和逗号等的所有组合,以使这个工作没有任何运气.有没有人能够做到这一点?
我正在寻找非宏观解决方案,谢谢.
密钥列表始终具有引号并以逗号分隔的列.所以看看你想要做什么,我想尝试做类似的事情,并引用整个字符串,然后当使用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;
Run Code Online (Sandbox Code Playgroud)
我还没有测试过,请告诉我它是否有帮助.