向SAS添加序列号

向SAS添加序列号,sas,Sas,我正在将Access数据库中的一个表导入SAS,其中序列列已损坏。我需要在SAS中创建一个新的序列列。我不想在Access中重新创建序列号,因为源表是按常规计划补充的。是否有类似于自动编号列的内容可以添加到SAS?当您在SAS中读取数据集时,n_uu指的是观察编号。这应该适合您: data new; set old; seqno = _n_; run; 当您在SAS中读取数据集时,\ n\指的是观测值。这应该适合您: data new; set old; seqno = _n_; ru

我正在将Access数据库中的一个表导入SAS,其中序列列已损坏。我需要在SAS中创建一个新的序列列。我不想在Access中重新创建序列号,因为源表是按常规计划补充的。是否有类似于自动编号列的内容可以添加到SAS?

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

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

当您在SAS中读取数据集时,\ n\指的是观测值。这应该适合您:

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

您可以这样做:

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

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

您可以执行以下操作:

data want;
set have;
autonumber+1;
run;
还有_N_,它是通过数据步循环的迭代次数,在正常数据步中,它等于行号。它不会写入数据集,但始终可以作为正常变量访问。

与观测值不相同的一个经典示例-一个DoW循环,用于为类变量的每个值将变量的总和附加到每行。最后请注意,_N_u不返回行号,而是返回迭代号-在本例中,数据步循环对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;
日志:

_N__与观测值不相同的一个经典示例-一个DoW循环,用于为类变量的每个值将变量的总和附加到每一行。最后请注意,_N_u不返回行号,而是返回迭代号-在本例中,数据步循环对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;
日志:


您可能会在SAS-L上更幸运地回答此问题,或者您可以在SAS-L上搜索SAS-L您可能会在SAS-L上更幸运地回答此问题,或者您可以在SAS-L上搜索SAS-L,因为“n”不是观察编号。它是通过数据步骤循环的迭代次数,通常相当于观察次数,但并不总是如此-取决于您在数据步骤中所做的事情,它可能是不相关的。这看起来像是吹毛求疵,但重要的是要保持分开,这样你就不会奇怪为什么事情不能按照你认为在更复杂的程序中应该的方式工作……我并不反对它将按照简单的数据步骤中所描述的方式工作,但重要的是不要使用“观察数”来描述,或者你最终会遇到困惑不解的人向SAS-L发帖,想知道为什么他们的代码不起作用…@Joe,你能举个例子吗?我不明白你在观察和迭代之间的区别。谢谢。典型的例子是DoW循环-我将把它作为一个单独的答案发布,因为评论的格式不太好。谢谢你,伊奇,我只需要一个简单的方法来添加一个新的唯一行id,可以使用模数将其细分为8等分。_n_不是观察值。它是通过数据步骤循环的迭代次数,通常相当于观察次数,但并不总是如此-取决于您在数据步骤中所做的事情,它可能是不相关的。这看起来像是吹毛求疵,但重要的是要保持分开,这样你就不会奇怪为什么事情不能按照你认为在更复杂的程序中应该的方式工作……我并不反对它将按照简单的数据步骤中所描述的方式工作,但重要的是不要使用“观察数”来描述,或者你最终会遇到困惑不解的人向SAS-L发帖,想知道为什么他们的代码不起作用…@Joe,你能举个例子吗?我不明白你在观察和迭代之间的区别。谢谢。典型的例子是DoW循环-我将把它作为一个单独的答案发布,因为评论的格式不好。谢谢你,伊奇,我只需要一个简单的方法来添加一个新的唯一行id,可以使用模数将其细分为8个相等的部分。