是否可以在新计算的变量上过滤数据步骤?
Is it possible to filter a data step on a newly computed variable?
在基本数据步骤中,我正在创建一个新变量,我需要根据这个新变量过滤数据集。
data want;
set have;
newVariable = 'aaa';
*lots of computations that change newVariable ;
*if xxx then newVariable = 'bbb';
*if yyy AND not zzz then newVariable = 'ccc';
*etc.;
where newVariable ne 'aaa';
run;
ERROR: Variable newVariable is not on file WORK.have.
我通常分两步完成,但我想知道是否有更好的方法。
( 当然,您总是可以根据 WORK.have
中存在的变量编写复杂的 where statement
。但是在这种情况下 newVariable
的计算太复杂了,效率更高在第二个 data step
)
中进行过滤
我找不到这方面的任何信息,如果答案在文档中但我没有找到,我很抱歉这个愚蠢的问题。如果需要,我会删除问题。
谢谢!
使用子集 if
语句:
if newVariable ne 'aaa';
一般来说,if <condition>;
等同于if not(<condition>) then delete;
。 delete
语句告诉 SAS 放弃数据步骤的本次迭代并返回到下一次迭代的开始。除非您在子集 if
语句之前使用了明确的 output
语句,否则这将阻止输出一行。
在基本数据步骤中,我正在创建一个新变量,我需要根据这个新变量过滤数据集。
data want;
set have;
newVariable = 'aaa';
*lots of computations that change newVariable ;
*if xxx then newVariable = 'bbb';
*if yyy AND not zzz then newVariable = 'ccc';
*etc.;
where newVariable ne 'aaa';
run;
ERROR: Variable newVariable is not on file WORK.have.
我通常分两步完成,但我想知道是否有更好的方法。
( 当然,您总是可以根据 WORK.have
中存在的变量编写复杂的 where statement
。但是在这种情况下 newVariable
的计算太复杂了,效率更高在第二个 data step
)
我找不到这方面的任何信息,如果答案在文档中但我没有找到,我很抱歉这个愚蠢的问题。如果需要,我会删除问题。
谢谢!
使用子集 if
语句:
if newVariable ne 'aaa';
一般来说,if <condition>;
等同于if not(<condition>) then delete;
。 delete
语句告诉 SAS 放弃数据步骤的本次迭代并返回到下一次迭代的开始。除非您在子集 if
语句之前使用了明确的 output
语句,否则这将阻止输出一行。