2012-08-31 112 views
1

我正在將Access數據庫中的表導入到序列列已損壞的SAS中。我需要在SAS中創建一個新的序列列。我不想在Access中重新創建序列號,因爲源表是按照定期計劃補充的。有沒有像可以添加到SAS的自動編號列?將序列號添加到SAS

+0

你可能有更好的運氣與SAS-L這個問題,或者你可以從[萊克斯揚森的頁面(HTTP查詢SAS-L://www.lexjansen。 com /) –

回答

4

當您讀入SAS中的數據集時,_n_指的是觀察值編號。這應該爲你工作:

data new; 
set old; 
seqno = _n_; 
run; 
+3

'_n_'不是觀察編號。它是通過數據步進循環的迭代次數,通常與觀察次數相等,但並不總是 - 取決於你在數據步驟中做了什麼,它可能是不相關的。這似乎很挑剔,但重要的是要保持分離,以便你不要懷疑爲什麼事情不像你認爲他們應該在更復雜的程序中那樣工作...... – Joe

+0

在這種情況下,它將按照我所描述的那樣工作。 – itzy

+1

我並不不同意它會像描述的那樣工作(在一個簡單的datastep中),但是不要用語言'觀察編號'來描述'_n_',或者最終讓人困惑的人發佈到SAS-L想知道爲什麼他們的代碼不工作... – Joe

5

你可以做這樣的事情:

data want; 
set have; 
autonumber+1; 
run; 

還有_N_這是迭代通過數據步循環,這在一個正常的數據的步驟是計數等於行號。它不寫入數據集,但始終可以作爲正常變量訪問。

3

_N_的典型示例與觀察編號不同 - 用於將變量的總和追加到類變量的每個值的每行的DoW循環。注意最後_N_沒有返回行號,但是迭代號 - 在這種情況下,數據步循環對於每個值x迭代一次,而不是每行一次,因爲行通過do被拉入。 .until循環。

data have; 
do x = 1 to 5; 
    do y = 1 to 3; 
    z=floor(7*ranuni(7)); 
    rownum+1; 
    output; 
    end; 
end; 
run; 

data test; 
do t=1 by 1 until (last.x); 
    set have; 
    by x; 
    sum_z+z; 
end; 
do t=1 by 1 until (last.x); 
    set have; 
    by x; 
    output; 
    put x= z= sum_z= _N_= rownum=; 
end; 
sum_z=0; 
run; 

登錄:

x=1 z=2 sum_z=12 _N_=1 rownum=1 
x=1 z=5 sum_z=12 _N_=1 rownum=2 
x=1 z=5 sum_z=12 _N_=1 rownum=3 
x=2 z=5 sum_z=13 _N_=2 rownum=4 
x=2 z=3 sum_z=13 _N_=2 rownum=5 
x=2 z=5 sum_z=13 _N_=2 rownum=6 
x=3 z=5 sum_z=12 _N_=3 rownum=7 
x=3 z=5 sum_z=12 _N_=3 rownum=8 
x=3 z=2 sum_z=12 _N_=3 rownum=9 
x=4 z=3 sum_z=12 _N_=4 rownum=10 
x=4 z=5 sum_z=12 _N_=4 rownum=11 
x=4 z=4 sum_z=12 _N_=4 rownum=12 
x=5 z=6 sum_z=13 _N_=5 rownum=13 
x=5 z=3 sum_z=13 _N_=5 rownum=14 
x=5 z=4 sum_z=13 _N_=5 rownum=15