Hash find方法输入值,尽管返回非零-SAS
我有一个在数据步骤中使用哈希的查询,如下所示:Hash find方法输入值,尽管返回非零-SAS,sas,Sas,我有一个在数据步骤中使用哈希的查询,如下所示: if _n_ = 1 then do; if 0 then set TableA; declare hash A(dataset: "TableA"); A.definekey ("UniqueKeyA" ); A.definedata ("DataA" ); A.definedone(); end; if _n_ = 1 then do; if 0 then s
if _n_ = 1 then do;
if 0 then
set TableA;
declare hash A(dataset: "TableA");
A.definekey ("UniqueKeyA" );
A.definedata ("DataA" );
A.definedone();
end;
if _n_ = 1 then do;
if 0 then
set TableB;
declare hash B(dataset: "TableB");
B.definekey ("UniqueKeyB" );
B.definedata ("DataB" );
B.definedone();
end;
rcA = A.find(key:UniqueKeyA);
rcB = B.find(key:UniqueKeyB);
我的印象是,如果数据存在,find
方法返回0,否则返回非零,如果找到数据,则将其放入表中。但是,这些查询为rcA
或rcB
返回非零值,并且仍然输入值
如果我的原始表是
UniqueKeyA UniqueKeyB
1 A
2 B
3 C
4 D
5 E
而表a
是
UniqueKeyA DataA
1 'High'
2 'Low'
5 'High
表B是
UniqueKeyB DataA
B 'Hot'
D 'Cold'
E 'Warm'
生成的表可能是
UniqueKeyA UniqueKeyB rcA DataA rcB DataB
1 A 0 'High' 42
2 B 0 'Low' 0 'Hot'
3 C 45 'Low' 42 'Hot'
4 D 45 'Low' 0 'Cold'
5 E 0 'High 0 'Warm'
我现在有个工作要做
if rcA = 0 then DataA = DataA;
if rcA ^= 0 then DataA = "";
if rcB = 0 then DataB = DataB;
if rcB ^= 0 then DataB = "";
但这似乎没有必要,因为我认为find
只在返回0时写入表
有人知道为什么会这样吗
如果您需要更多信息,请告诉我,谢谢
另外,我还有一个关于这些散列返回整个表而不是指定列的问题,问题是:这是同样事情的另一个副作用-
如果为0,则设置tableA
通过
SET
、MERGE
或UPDATE
语句到达数据步骤的任何变量都将自动RETAIN
ed,这意味着它不会在数据步骤循环开始时设置为missing。因此,您需要放弃if 0,然后设置tableA/B
行(您可以用两个length
语句替换它们,每个散列中每个变量一个),或者执行您正在执行的操作,手动将它们设置为missing。再次感谢,非常感谢!