我正在与sas一起操作一些数据集。 我正在使用数据步骤应用一些条件来保留列并根据某些值进行过滤。 问题在于,我希望对最终不需要的列进行筛选,因此我想首先应用where子句,然后应用keep子句。 问题是sas首先执行keep子句,然后执行where,因此,当它尝试应用where指令时,它找不到应在其上应用的列。这是我的代码:
data newtable;
set mytable(where=(var1<value)
keep var2);
end;
在这种情况下,错误是找不到var1,因为我决定只保留var2。我知道我可以执行两个数据步骤,但是我只想一步完成所有操作。 我该如何实现?
答案 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