2014-09-23 109 views
1

我想弄清楚什么是最好的方式去做这件事,我对sas真的很陌生,我只是在飞行中学习,所以任何帮助将不胜感激。我必须在目标表(tableB)上的一个数值列(长度为8,格式为23)中插入一个PK值。我尝试使用通常的空白或0值来查看自动增量是否会启动,但不是。我也尝试使用max(id)+1,这不起作用,它给了我一个重复的关键错误。SAS-增加一个数字PK列,在循环内自动增量

现在我有,做以下(请与我裸露,如果这个代码不太守,我仍然很新的SAS)宏中的代码:

%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; 

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

任何帮助,这将是极大的再次

回答

1

使用SQL SELECT语句赞赏 由于通过B获得最大值,加1,在标签中的值,然后再插入。

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; 
+0

嗨DomPazz,感谢您的快速回答。我给了它绿色的复选标记,我会给它一个重点,但我显然没有。 – vbala2014 2014-09-24 16:34:30

+0

另外还有一个问题,如果我必须从同一个表中获取主键而不是另一个表,那么这种方法应该正确吗?请纠正我,如果我错了 – vbala2014 2014-09-24 16:35:26

+0

我不知道你的意思。你能详细说明吗? – DomPazz 2014-09-24 22:07:18