2016-08-12 88 views
-1

我的線沿線的一些SAS代碼:SAS FIRST.VARIABLE沒有給出輸出

DATA MY_SAMPLE; 
    SET SAMPLE; 
    BY A; 
    IF A = 1 THEN B = 1; 
    ELSE IF A ^= 1 THEN B = 0; 
    ELSE IF MISSING(A) THEN B = .; 
    IF FIRST.A; 
RUN; 

這與0意見返回一組(它不應該這樣做)。我已經按A對數據進行了排序,並試圖在應用IF FIRST.A之前將數據讀入中間數據集中,但得到相同的結果。

我錯過了一些完全明顯的東西嗎?我一直使用FIRST和LAST!

+0

代碼看起來不錯,只有'ELSE IF'語句的順序不正確。你確定你在'SAMPLE'數據集中有觀察嗎? –

+0

這不是一個好問題。如果數據步驟返回'0'觀察值,則源數據集爲空。你應該更加關注你的日誌告訴你什麼。 –

回答

2

同意@Robert,示例代碼應該輸出記錄,假設您的輸入數據中有記錄並對它進行排序。

我會仔細檢查來自真實程序/數據的日誌,並確保沒有錯誤,並確保輸入數據集具有記錄。

如果不幫忙,我想補充一些調試PUT語句,像下面的(未經測試):

DATA MY_SAMPLE; 
    SET SAMPLE; 
    BY A; 

    IF A = 1 THEN B = 1; 
    ELSE IF A ^= 1 THEN B = 0; 
    ELSE IF MISSING(A) THEN B = .; *This will never be true ; 

    put "Before subsetting if " (_n_ A first.A)(=) ; 
    IF FIRST.A; 
    put "After subsetting if " (_n_ A first.A)(=) ; 
RUN; 

正如羅伯特指出,作爲寫你Else if Missing(A)永遠不會是真實的,因爲如果是因爲SAS使用二進制邏輯(true/false)而不是三元邏輯(true/false/null),因此缺少事先的Else if A ^= 1將評估爲true。

此外,我會檢查您的代碼中的任何雜散OUTPUT聲明。

0

檢查日誌;檢查輸入;關閉MSSQL;再次打開它,你看,代碼第一次工作。感謝降級,但我沒有意識到MSSQL很容易出現抽搐!