2

私はちょうどSASを学んでいます。これは非常に単純な質問です。おそらく考えすぎです。

というデータセットがpeople_infoあり、変数の 1 つは ですSocialSecurityNuminvalid_ssn単一の変数で呼び出される別のテーブルがあります。一意で無効なSocialSecurityNum観測です。

人物 (観察) がテーブル内の値の 1 つと一致するinvalid_people_info場合に出力する DATA ステップ (または PROC SQL ステップ) が必要です。それ以外の場合は、 に出力されます。SocialSecurityNuminvalid_ssnpeople_info

これを行う最善の方法は何ですか?

編集:明確にするために詳細情報...

people_info次のようになります。

name     SocialSecurityNum
joe      123
john     456
mary     876
bob      657

invalid_ssn次のようになります。

SocialSecurityNum
456
876

私が欲しいのは、people_info(その場で)変更して次のようにすることです:

name     SocialSecurityNum
joe      123
bob      657

invalid_people_infoそして、次のように呼び出される新しいテーブル:

name     SocialSecurityNum
john     456
mary     876
4

2 に答える 2

5

Hong Ooi が示したデータ ステップは素晴らしいものですが、最初に並べ替える必要がなく、実際に完全なマージを実行しなくても、proc sql を使用してこれを行うこともできます。

proc sql noprint;

   create table invalid_people_info as
   select *
   from people_info
   where socialsecuritynum in (select distinct socialsecuritynum from invalid_ssn)
   ;

   create table people_info as
   select *
   from people_info
   where socialsecuritynum not in (select distinct socialsecuritynum from invalid_ssn)
   ;

quit;

これは、ssn が無効な ssn の個別のリストにある (ない) すべての行を選択するだけです。

于 2013-07-16T15:19:44.003 に答える
3

あなたの要件は明確ではありません。無効な SSN をすべて削除しpeople_infoて、新しいデータセットに入れますか? もしそうなら、これはうまくいくはずです。まず、SocialSecurityNum でデータセットを並べ替える必要があります。

data people_info invalid_people_info;
    merge people_info (in=a) invalid_ssn (in=b);
    by SocialSecurityNum;
    if b then output invalid_people_info;
    else output people_info;
run;
于 2013-07-15T02:06:01.383 に答える