【发布时间】:2012-08-26 08:04:07
【问题描述】:
我正在将一个表从 Access 数据库导入 SAS,其中序列列已损坏。我需要在 SAS 中创建一个新的序列列。我不想在 Access 中重新创建序列号,因为源表会定期补充。是否可以将自动编号列添加到 SAS 中?
【问题讨论】:
-
你在SAS-L上的这个问题可能会更好,或者你可以从Lex Jansen's page搜索SAS-L
标签: sas
我正在将一个表从 Access 数据库导入 SAS,其中序列列已损坏。我需要在 SAS 中创建一个新的序列列。我不想在 Access 中重新创建序列号,因为源表会定期补充。是否可以将自动编号列添加到 SAS 中?
【问题讨论】:
标签: sas
_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
【讨论】:
你可以这样做:
data want;
set have;
autonumber+1;
run;
还有_N_,它是通过数据步循环的迭代计数,在正常数据步中等于行号。它不会写入数据集,但始终可以作为普通变量访问。
【讨论】:
当您在 SAS 中读入数据集时,_n_ 指的是观察编号。这应该适合你:
data new;
set old;
seqno = _n_;
run;
【讨论】:
_n_ 不是观察号。它是通过数据步骤循环的迭代次数,通常等于观察次数,但并非总是如此 - 取决于您在数据步骤中所做的事情,它可能是不相关的。这似乎是吹毛求疵,但保持独立很重要,这样您就不会想知道为什么事情不会按照您认为在更复杂的程序中应有的方式工作......
_n_,否则你最终会得到发帖到 SAS-L 的困惑的人想知道为什么他们的代码不起作用......