我有一個命名爲測試數據集,用一個數值變量命名爲三點意見爲「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和刪除輸出語句,我得到一個空的數據集。我無法解決這個問題。有人可以解釋這個嗎?
我有一個命名爲測試數據集,用一個數值變量命名爲三點意見爲「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和刪除輸出語句,我得到一個空的數據集。我無法解決這個問題。有人可以解釋這個嗎?
大多數SAS數據步驟實際上在該步驟執行SET或INPUT語句並且發現沒有更多可用輸入時結束。這就是發生的事情。
SAS通常在數據步驟迭代結束時寫入觀察值。例外是當你有一個明確的OUTPUT語句編碼。因此,如果沒有OUTPUT步驟,SAS只會在數據步驟結束時寫出觀察結果。所以,當你rmeoved的輸出,您作爲階梯一樣:
DATA abc;
DO i = 1 to 3;
SET test;
m+1;
END;
OUTPUT;
RUN;
但是如果你的DO循環迭代次數多有對SET語句讀那麼它就再也不會到最後寫的意見輸出,因爲它將讀取輸入數據集的末尾並停止。
非常感謝。有沒有可能請您和我一起創建一個聊天室,我只想快速理解一些事情。另一個合適的時機也可以。 – SumB
這似乎並不正確。 LOG說什麼?即使您將DO循環的上限設置爲2,000,如果輸入數據「test」有3個觀察值,您的數據步驟應該寫入3個觀察值。 – Tom
@Tom聲明是正確的,你有其他問題。 「測試」數據集中的變量名稱是什麼? – Reeza
我剛糾正了我的問題。如果我從do循環中刪除輸出語句,我會得到一個空數據集。當循環1到4時,測試數據集中的變量名是'id'。我無法理解的是SET語句讀取整個數據集,所以通過DO循環3次,我們不應該讀取整個數據3次,以獲得9個觀察? – SumB