我是 SAS 新手,不太理解以下代码。
DATA my_table;
IF _n_=1 THEN DO;
DECLARE hash my_hash(hashexp: 4,dataset: "my_dataset");
rc = my_hash.definekey("my_var1");
rc = my_hash.definedata("my_var2","my_var3");
rc = my_hash.definedone();
CALL missing(rc, my_var1,my_var2,my_var3);
END;
SET my_other_dataset;
RUN;
给我这段代码的人说它正在执行“哈希连接”。根据我所做的研究,hasexp:4 意味着我们使用 2^4 个“桶”来存储哈希值。我真正不明白的是“rc=”部分。这是怎么回事?
“rc”通常是“返回代码”的简写。 Define...() 方法实际上并不需要将其结果返回到返回代码中。它更常用于其他哈希方法,例如.find() 或 .check() 来确定哈希查找是否成功。
此外,代码实际上并未在哈希表中执行任何查找,因为没有 .find() 或 .check() 方法调用。它只是将“my_dataset”加载到哈希表中。
我希望它看起来更像下面这样:
数据 my_table; 如果 _n_=1 那么做; 声明哈希 my_hash(hashexp: 4,数据集: "my_dataset"); rc = my_hash.definekey("my_var1"); rc = my_hash.definedata("my_var2","my_var3"); rc = my_hash.defineone(); 结尾; 设置我的其他数据集; 呼叫缺失(rc,my_var2,my_var3); /* 假设 my_var1 在 'my_other_dataset' 中 */ rc = my_hash.find() ; /* 如果在 my_dataset 中找到 my_other_dataset 中的 my_var1 的值,则 rc 将等于 0, my_var2 和 my_var3 将使用来自 哈希表 */ 跑步;