SAS-递增在do循环内自动递增的数字PK列

时间:2014-09-23 22:17:34

标签: sql sas

我必须将PK值插入到目标表(tableB)上自动增量的数字列(长度为8,格式为23.)中。我尝试使用通常的空白或0值来查看自动增量是否会启动,但事实并非如此。我也尝试使用max(id)+1,这不起作用,它给了我一个重复的键错误。

我在宏中执行以下代码:

  %macro testmacro;
        %local datasetcount iter;

        proc sql;
        select count(*) into :datasetcount from tableA;

        %do %while (&iter.<=&datasetcount.);
                 data _NULL_;
                 Set tableA (firstobs=&iter. obs=&iter.);
                 run;
    PROC SQL;
       Insert into TableB(pkid, col1b, col2b, col3b)
       Select (**<need to get last pkid and increment by 1 so no duplication occurs>**, col1A, col1B, col1C)
       From tableA (firstobs=&iter. obs=iter.)
    QUIT;

    %let iter=%eval(&iter.+1);
  %end;

%mend testmacro;
%testmacro;

我只需找到一个离开来自动从TABLEB中获取最后一个PKID条目并将其递增1并将其传递到下一列,直到迭代循环完成。

1 个答案:

答案 0 :(得分:1)

使用SQL SELECT语句从B获取最大值,添加1,在A中标记值,然后插入。

PROC SQL noprint:
select max(pkid) into :mpk from TableB;
quit;

data tableA;
set tableA;
pkid = _n_ + &mpk; /*_n_ is the row number*/
run;

PROC SQL noprint;
Insert into TableB(pkid, col1b, col2b, col3b)
       Select pkid, col1A, col1B, col1C
       From tableA ;
QUIT;