申请保留并在同一地点一起

时间:2018-09-06 07:50:48

标签: sas where datastep

我正在与sas一起操作一些数据集。 我正在使用数据步骤应用一些条件来保留列并根据某些值进行过滤。 问题在于,我希望对最终不需要的列进行筛选,因此我想首先应用where子句,然后应用keep子句。 问题是sas首先执行keep子句,然后执行where,因此,当它尝试应用where指令时,它找不到应在其上应用的列。这是我的代码:

data newtable;
set mytable(where=(var1<value)
keep var2);
end;

在这种情况下,错误是找不到var1,因为我决定只保留var2。我知道我可以执行两个数据步骤,但是我只想一步完成所有操作。 我该如何实现?

2 个答案:

答案 0 :(得分:3)

这可以通过在输出数据集上使用keep数据集选项来实现,例如(未测试):

data newtable(keep=var2);
  set mytable(where=(var1<value));
end;

或者,可以使用keep语句,例如(未试用):

data newtable;
  set mytable(where=(var1<value));
  keep var2;
end;

答案 1 :(得分:1)

@Amir拥有此权利。 @Quentin担心这一切的效率。除非您的where子句高度参与,否则这将是您最有效的方法。

Optional<Boolean>

是的,data newtable; set mytable(where=(var1<value) keep=var1 var2); keep var2; end; 被读入PDV,但是您已经将PDV限制为仅输出所需的变量和where子句所需的变量。

如果您只想运行where并且不执行其他数据步骤逻辑,那么PROC SQL与上面的方法一样有效。

var1