SAS - 循环通过源表并插入目标表

时间:2014-09-19 19:27:02

标签: sas

我想知道是否有人可以帮我解决sas问题。

我必须在现有源表中超过10000行,并将源表值插入到多个目标表中。我必须从源表中一次插入一行,并确保将父表(插入期间)的主键插入子表(插入期间)

我正在使用SAS API(SAS EG)

以下是源表的样子(请注意这是另一个表而不是数据过程),该表的名称是countrycodelist,其中包含以下列:

Txn_id  statuscode  Typecode  classcode  identifier 

001          2          cnt      p1         13485
002          2          na       n1         13444
003          4          cnt      n1         12888

现在我有目标表的以下代码: 注意:目标表已经创建,我只需插入它们(tableA / tableB)

PROC SQL;
Insert into tableA (TXNID, STATUSCODE,CREATET,LASTUPDATET)
Select TXN_ID,STATUSCODE, datetime(), datetime()
From CountryCodeList
;

退出;

在上面的代码运行之后,状态代码被插入到表sim.tableA中,但是这个表有一个自动增量的键(pk)。我需要使用此密钥插入子表,以便从父表到下面的子表进行正确的连接。

PROC SQL;
Insert into tableB (tableAID,TypeCode,ClassCode,DisplayID,)
Select 1101,TypeCode,ClassCode,Identifier
From CountryCodelist;
QUIT;

我从tableA(1101)手动插入最后一个PK#,这适用于小型表插入,但在大规模插入时,我需要从tableA中获取最后一个PK并插入到tableB中。 SQL具有诸如scope_identity()或@@ IDENTITY的使用之类的函数来获取最后插入的密钥,但这些函数在SAS中不起作用,或者我可能以错误的方式使用它。

此外,我需要从源表(CountryCodelist)一次处理这些插入。这个countrycodelist表可以随着时间的推移进行更新,并且可以超过10k记录

1 个答案:

答案 0 :(得分:0)

好的,我会开枪。以下流程是否符合您的要求?如果是,我们可以将其转换为代码:

  1. 确定TableA中的最大密钥
  2. 将CountryCodeList中的一条记录插入表A。
  3. 将talbeAID值分配给maxKey + 1的记录。
  4. 将该记录(现在将maxKey + 1作为tableAID)插入表B
  5. 转到1
  6. 仍然不了解很多。例如,为什么一次记录一次?如果表A和表B总是具有相同数量的记录,那么这应该更容易。但是这样的过程对你想要的东西有意义吗?