2010-04-13 65 views
0

我试图操纵R.从SAS输出到正确的格式,条件语句以下条件字符串使用正则表达式条件语句是SAS输出条件的一个例子:操纵中的R

. < var1_a<=80 and var2_a>50.8 

我已经写了处理函数一些必要的改造:产生以下字符串

conditonalsub <- function(x) { 
subnew <- gsub("<=", " <= ", x) 
subnew <- gsub(">=", " >= ", subnew) 
subnew <- gsub(">", " > ", subnew) 
subnew <- gsub("and", "&", subnew) 
subnew <- gsub("\\.\\s", "NA ", subnew) 
return(subnew) 

NA < var1_a <= 80 & var2_a > 50.8 

我正在使用这些条件语句来对数据框架的观察进行子集。所以在这个例子中,我希望R选择var1_a值小于或等于80的所有观测值,并且var2_a大于50.8。我如何修改上面的函数,以便我得到一个条件语句,它能够像上面的条件语句的var1_a部分那样获取缺失值?我的猜测是新条件语句的格式看起来像这样?

(var1_a == NA | var1_a <= 80) & (var2_a > 50.8) 

回答

0

这不是一个真正的答案,但我认为这个问题比您提出的要复杂得多。

  1. 缺失值在SAS中有点奇怪。为了比较,它们相当于负无穷。因此,缺失值小于任何非遗漏数字,但不小于遗漏数字。所以. < var1_a<=80声明是这样写的避免选择缺失值,不包括它们。这也意味着,真正的问题是inoccuous前瞻性陈述,如a<10如果a缺少这将评估在SAS TRUE,但不是那么R.

  2. 在另一方面,2 < a < 4语法获得在SAS中允许2到4之间的值,但在R中不允许,所以你必须找到一种方法来检测这个及其所有变化。根据您希望得到的一般情况,您必须重新编码SAS可以表示比较(EQ,NE,GEQ等)的替代方法。

因此,除非您的SAS逻辑语句集的语法非常受限,否则您将遇到许多麻烦。

+0

谢谢Aniko。由于上述示例中的var1_a条件语句避免选择缺失值,因此我将从条件语句中删除该部分(。<)。我的SAS程序中的所有其他条件都具有语法x < a or x > a。 – sheed03 2010-04-14 13:11:30