2010-04-13 79 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