1

データベースには、次のような電子メール アドレス データセットがあります。ID 1003 には 2 つの観察結果があることに注意してください。

data Email;
    input id$ email $20.;
    datalines;
1001 1001@gmail.com
1002 1002@gmail.com
1003 1003@gmail.com
1003 2003@gmail.com
;
run;

そして、以下のようにメールアドレスを変更するユーザーリクエストを受け取ります.

data amendEmail;
    input id$ email $20.;
    datalines;
1003 1003@yahoo.com
;
run;

updateデータステップでステートメントを使用しようとしています

data newEmail;
    update Email amendEmail;
    by id;
run;

ID 1003 の最初の観察のみを変更します。

私の望ましい出力は 1001 1001@gmail.com 1002 1002@gmail.com 1003 1003@yahoo.com 1003 1003@yahoo.com です。

非proc SQLメソッドを使用することは可能ですか?

4

3 に答える 3

1

両方の行を変更したい場合は、重複が発生します。まず、ソース テーブルの重複の問題に対処する必要があります。

結果が重複する実用的なソリューションが必要な場合は、PROC SQL を LEFT JOIN と電子メール アドレスの条件句と共に使用することを検討してください。

PROC SQL;
    CREATE TABLE EGTASK.QUERY_FOR_EMAIL AS 
        SELECT t1.id, 
           /* email */
            (CASE WHEN t1.id = t2.id THEN t2.email 
            ELSE t1.email 
            END) AS email 
        FROM WORK.EMAIL t1 
        LEFT JOIN WORK.AMENDEMAIL t2 ON (t1.id = t2.id);
QUIT;

コメントによると、データステップを使用する場合は、次を使用できます。

data want (drop=email2);
  merge Email amendEmail (rename=(email=email2));
  by id;
  if email2 ne "" then email=email2; 
run;
于 2015-08-05T09:25:04.237 に答える