我必须将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并将其传递到下一列,直到迭代循环完成。
答案 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;