2017-07-28 150 views
0

我有一個命名爲測試數據集,用一個數值變量命名爲三點意見爲「ID」:SAS Do循環在Set語句

1 
2 
3 

我創建使用do循環如下另一個問題:

DATA abc; 
DO i = 1 to 3; 
    SET test; 
    m+1; 
    OUTPUT; 
END; 
RUN; 

這將返回3個觀察值。

如果我改變從1循環到4和刪除輸出語句,我得到一個空的數據集。我無法解決這個問題。有人可以解釋這個嗎?

+1

這似乎並不正確。 LOG說什麼?即使您將DO循環的上限設置爲2,000,如果輸入數據「test」有3個觀察值,您的數據步驟應該寫入3個觀察值。 – Tom

+0

@Tom聲明是正確的,你有其他問題。 「測試」數據集中的變量名稱是什麼? – Reeza

+0

我剛糾正了我的問題。如果我從do循環中刪除輸出語句,我會得到一個空數據集。當循環1到4時,測試數據集中的變量名是'id'。我無法理解的是SET語句讀取整個數據集,所以通過DO循環3次,我們不應該讀取整個數據3次,以獲得9個觀察? – SumB

回答

2

大多數SAS數據步驟實際上在該步驟執行SET或INPUT語句並且發現沒有更多可用輸入時結束。這就是發生的事情。

SAS通常在數據步驟迭代結束時寫入觀察值。例外是當你有一個明確的OUTPUT語句編碼。因此,如果沒有OUTPUT步驟,SAS只會在數據步驟結束時寫出觀察結果。所以,當你rmeoved的輸出,您作爲階梯一樣:

DATA abc; 
DO i = 1 to 3; 
    SET test; 
    m+1; 
END; 
OUTPUT; 
RUN; 

但是如果你的DO循環迭代次數多有對SET語句讀那麼它就再也不會到最後寫的意見輸出,因爲它將讀取輸入數據集的末尾並停止。

+0

非常感謝。有沒有可能請您和我一起創建一個聊天室,我只想快速理解一些事情。另一個合適的時機也可以。 – SumB