【问题标题】:Adding sequence numbers to SAS向 SAS 添加序列号
【发布时间】:2012-08-26 08:04:07
【问题描述】:

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

【问题讨论】:

  • 你在SAS-L上的这个问题可能会更好,或者你可以从Lex Jansen's page搜索SAS-L

标签: sas


【解决方案1】:

_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

【讨论】:

    【解决方案2】:

    你可以这样做:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • _n_ 不是观察号。它是通过数据步骤循环的迭代次数,通常等于观察次数,但并非总是如此 - 取决于您在数据步骤中所做的事情,它可能是不相关的。这似乎是吹毛求疵,但保持独立很重要,这样您就不会想知道为什么事情不会按照您认为在更复杂的程序中应有的方式工作......
      • 我不反对它会像描述的那样工作(在一个简单的数据步骤中),但重要的是不要使用语言“观察号”来描述_n_,否则你最终会得到发帖到 SAS-L 的困惑的人想知道为什么他们的代码不起作用......
      • @Joe 你能举个例子吗?我不明白你在观察#和迭代#之间所做的区别。谢谢。
      • 典型的例子是 DoW 循环——我将把它作为一个单独的答案发布,因为 cmets 的格式不太好。
      • 谢谢 itzy,我只需要一种简单的方法来添加一个新的唯一行 ID,该行 ID 可以使用模数细分为 8 个相等的部分。
      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      相关资源
      最近更新 更多