假设我有两个名为“test”和“lookup”的文件。 文件“test”包含以下信息:
COL1 COL2
az ab
fc ll
gc ms
cc ds
文件“查找”包含:
VAR
ll
dd
cc
ab
ds
我想找到那些在“测试”但不在“查找”中的观察结果,并用缺失值替换它们。这是我的代码:
data want; set test;
array COL[2] COL1 COL2;
do n=1 to 2;
if COL[n] in lookup.VAR then COL[n]=COL[n];
else COL[n]=.;
end;
run;
我尝试了上面的代码。但是ERROR表明“期待关系或算术运算符”。 我的问题是如何从另一个文件中引用变量?
答案 0 :(得分:1)
首先,从this post抓取%create_hash()
宏。
您需要使用哈希对象来实现您的目标。
哈希查找的返回码在找到时为零,在找不到时为非零。
字符缺失值不是.
,而是""
。
data want;
set have;
if _n_ = 1 then do;
%create_hash(lu,var,var,"lookup");
end;
array COL[2] COL1 COL2;
do n=1 to 2;
var = col[n];
rc = lu.find();
if rc then
col[n] = "";
end;
drop rc var n;
run;
答案 1 :(得分:0)
这是使用proc sql的另一种方法:
proc sql;
create table want as
select case when col1 in (select var from lookup) then '' else col1 end as col1,
case when col2 in (select var from lookup) then '' else col2 end as col2
from test;
quit;