申请保持和在哪里一起sas

问题描述 投票:4回答:2

我正在与sas合作操纵一些数据集。我正在使用数据步骤来应用一些条件来保持列和过滤某些值。问题是我想过滤最终我不需要的列,所以我想首先应用where子句,然后应用keep子句。问题是sas执行,首先执行keep子句,然后执行where,所以当它尝试应用where指令时,它找不到应该应用它的列。这是我的代码:

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

在这种情况下,错误是无法找到var1,因为我决定只保留var2。我知道我可以做两个数据步骤,但我只想一步完成所有事情。我怎样才能做到这一点?

sas where datastep
2个回答
3
投票

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

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

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

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

1
投票

@Amir有权利。 @Quentin担心这一切的效率。除非你的where子句涉及很多,否则这将是你最有效的方法。

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

是的,var1被读入PDV,但是您已将PDV限制为仅在输出中需要的变量并且在where子句中需要。

如果您只想运行where而不执行其他数据步骤逻辑,则PROC SQL与上述方法一样高效。

proc sql noprint;
create table newtable as
select var2
   from mytable
   where var1<value;
quit;
© www.soinside.com 2019 - 2024. All rights reserved.