2016-08-04 245 views
1

我是初學SAS編程人員。 我已經寫了一段代碼來理解這些東西,但是我沒有得到爲什麼在得到continue語句之後它將輸出一個語句。 下面給出的是代碼:後端處理SET語句以及在SAS中使用Continue和Leave語句

data a B; 
put 'entering do DATASTEP' ; 
do i=1 to 4; 
    put 'entering do loop'" " i; 
if (i=1) then do; 
    put 'value of i is 1'" " i; 

    put 'Entering the loop' ; 
    put j=_N_; 
    if _N_ = 2 then continue; 
    set sashelp.class(firstobs=1 obs=5); 
    put 'Ouside the loop'; 
    output a; 
    end; 
if (i=2) then do; 
    put 'value of i is 2'" " i; 

    put 'Entering the loop' ; 
    put j=_n_; 
    set sashelp.class(firstobs=6 obs=10); 
    put 'Ouside the loop'; 
    output B; 
    end; 
end; 
put 'GETING OUT OF THE DATASTEP'; 
run; 

有關我的疑問請求。請運行這更清晰,那麼我們就可以有一個關於輸出數據集和日誌的討論。

在此先感謝。

+0

你是怎麼編寫你不明白的代碼的?你到底想要做什麼? – Cristina

+0

感謝克里斯蒂娜的迴應。我不想從這些代碼中獲得任何要求。我只是想了解輸出是如何生成到兩個數據集中的,以及爲什麼Continue Statement沒有按照其規範工作。據我說,在數據集A中應該只有4條記錄,因爲我已經使用了_N_ = 2的繼續聲明,但是我得到了5條記錄。第二條記錄不應進入數據集A,因爲continue語句在輸出A之前。請讓我知道,如果您遇到我的問題。 –

+0

啊哈,好的!感謝您的澄清 - 您可以將這些信息添加到您的帖子中,以使其更易於理解。 – Cristina

回答

2

它在我看來像CONTINUE工作正常。

正常情況下,當您讀取輸入數據的末尾時,SAS會停止數據步驟。沒有CONTINUE語句,當它試圖從第一次SET語句讀取第6次。但是,既然你跳過它,它會在第6次嘗試執行第二條SET語句時停止。

以下是您的數據步驟正在進行的簡化版本。注意它是如何以1,6,7,2,8,3,9,4,10,5順序讀取記錄的。

data sample; 
    do i=1 to 10; output; end; 
run; 

data _null_ ; 
    if _n_^=2 then do; 
    set sample (firstobs=1 obs=5); 
    put i=; 
    end; 
    set sample (firstobs=6 obs=10); 
    put i=; 
run; 

i=1 
i=6 
i=7 
i=2 
i=8 
i=3 
i=9 
i=4 
i=10 
i=5