SAS查找文本(部分)并删除观察

时间:2013-07-30 18:51:30

标签: sas

数据如下所示:

data test;
input v1 $ v2 v3;
datalines;
AB 4 5
AB 0 4
A 4 .
A 1 0
;;;;
run;

V2是A的测试结果,V3是B的测试结果。

如果V1不包含字母“B”且编号为0,则应将其替换为数字零。

逻辑将是这样的:

if V1 does not contain A AND V2 = 0 then replace V2 = .
if V1 does not contain B AND V3 = 0 then replace V3 = .

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用CASELIKE

在sql步骤中执行此操作

例如

proc sql noprint;

  create table test1 as
  select V1, case
                 when V1 NOT LIKE '%A%' and V2 = 0 then .
                 else V2
             end as V2,
             case
                 when V1 NOT LIKE '%B%' and V3 = 0 then .
                 else V3
             end as V3
   from test
   ;
quit;

答案 1 :(得分:0)

您可以使用FIND或INDEX(两者的工作方式相似,选项略有不同)。我并不完全理解你的逻辑,因为它是不一致的,而是与你的示例逻辑一致:

if find(v1,"A") = 0 and v2=0 then call missing(v2); *or then v2=. or then v2=whatever;

类似于B和V3。