1

我正在将 Access 数据库中的表导入 SAS,其中序列列已损坏。我需要在 SAS 中创建一个新的序列列。我不想在 Access 中重新创建序列号,因为源表会定期补充。是否有可以添加到 SAS 的自动编号列之类的东西?

4

3 回答 3

5

你可以这样做:

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

还有_N_一个是通过数据步循环的迭代计数,在正常的数据步中,它等于行号。它不会写入数据集,但始终可以作为普通变量访问。

于 2012-08-31T13:36:34.737 回答
4

当您在 SAS 中读取数据集时,_n_指的是观察数。这应该适合你:

data new;
 set old;
 seqno = _n_;
run;
于 2012-08-31T13:35:35.127 回答
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
于 2012-08-31T14:42:30.440 回答