私は以下のように2つのデータセットを持っています
id name status
1 A a
2 B b
3 C c
別のデータセット
name status new
C c 0
D d 1
E e 1
F f 1
2番目のテーブルから1番目のテーブルにすべての行を挿入するにはどうすればよいですか?状況は、最初のテーブルが永続的であるということです。2番目のテーブルは毎月更新されるので、毎月更新されるテーブルのすべての行を永続テーブルに追加して、次のようにします。
id name status
1 A a
2 B b
3 C c
4 D d
5 E e
6 F f
私が直面している問題は、データセット1からIDをインクリメントできないことです。検索した限り、SASのデータセットには自動インクリメントプロパティがありません。自動インクリメントはデータステップを使用して実行できますが、このような2つのテーブルの場合にデータステップを使用できるかどうかはわかりません。通常のSQLは
Insert into table1 (name, status)
select name, status from table2 where new = 1;
しかし、sasデータセットは自動インクリメント列をサポートしていないため、私が直面している問題があります。上記のprocsqlの後に以下のSASデータステップを使用して解決できます
data table1;
set table1;
if _n_ > 3 then id = _n_;
run;
これによりid列の値が増加しますが、コードはやや醜く、idは主キーであり、他のテーブルで外部キーとして使用されているため、古い行のIDを台無しにしたくありません。 。
私はSASの学習と作業の両方の過程にあるので、助けていただければ幸いです。前もって感謝します。
追加の質問:2番目のテーブルに新しい列がない場合、データステップを使用して必要なもの(月次テーブル(2番目)から永続テーブル(1番目)に新しい行を追加)を完了する方法はありますか?現在、この醜いproc sql/dataステップを使用して新しい列を作成しています
proc sql; //create a temp table from table2
create t2temp as select t2.*,
(case when t2.name = t1.name and t2.status = t1.status then 0 else 1) as new
from table2 as t2
left join table1 as t1
on t2.name = t1.name and t2.status = t1.status;
drop table t2; //drop the old table2 with no column "new"
quit;
data table2; //rename the t2temp as table2
set t2temp;
run;