SQLプロシジャによる変数値の更新方法を紹介。
data DT1; A=1; B="AA"; output; A=2; B="BB"; output; A=3; B="CC"; output; run; data DT2; A=2; B="YY"; output; A=3; B="ZZ"; output; run; データセットDT1
データセットDT2
|
方法1
proc sql; update DT1 set B = "XX" where A = 2 ; quit;
UPDATE 対象のデータセット SET 更新する変数 = 格納する値 WHERE 更新するレコードの条件 |
方法2
proc sql; update DT1 set B = (select B from DT2 where DT1.A=DT2.A) where exists (select * from DT2 where DT1.A=DT2.A); quit; データセットDT1
他のデータセットを使って更新する方法。 処理内容を翻訳してみると以下のような感じになります。 SET B = (DT1とDT2の変数Aがイコールになる時の、DT2の変数Bの値) WHERE DT1とDT2の変数Aがイコールになるレコードを更新対象とする |
間違えに注意
proc sql; update DT1 set B = (select B from DT2 where DT1.A=DT2.A); quit; データセットDT1
よく間違えやすいのが、方法2でWHEREを入れ忘れてしまうケースです。 更新するレコードをWHEREで絞ってないので、DT1とDT2で変数Aがイコールになるものがない場合は欠損値が返されて、変数Bの値を欠損値として更新してしまう。 |
1.変数を選択する【SELECT】
2.レコードを並べ替える【ORDER BY】
8.レコードを削除する【DELETE】
9.値を更新する【UPDATE】
10.デカルト積をつくる【CROSS JOIN】
10.デカルト積をつくる【CROSS JOIN】
なるほど~。勉強になりました
返信削除コメントありがとうございます!
削除そういっていって頂けると励みになります!