1

假设我有两个名为“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 显示“期望一个关系或算术运算符”。我的问题是如何从另一个文件中引用一个变量?

4

2 回答 2

1

首先,从这篇文章%create_hash()中获取宏。

您需要使用哈希对象来实现您要查找的内容。

哈希查找的返回码在找到时为零,在未找到时为非零。

字符缺失值 not .but ""

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;
于 2013-10-27T00:43:56.593 回答
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;
于 2013-10-27T23:18:55.423 回答